Report #14970
[bug\_fix] npm ERR\! code ERESOLVE
Add the --legacy-peer-deps flag to npm install \(e.g., npm install --legacy-peer-deps\) or set legacy-peer-deps=true in .npmrc. This restores the npm 6.x peer dependency resolution algorithm that allows conflicting peer dependency ranges, bypassing the strict Arborist tree validation introduced in npm 7\+.
Journey Context:
A developer upgrades from Node 14 to Node 18, which ships with npm 9. Running npm install on a legacy React 17 project immediately throws ERESOLVE with a dependency tree showing conflicting peer deps: react@"^17.0.0" vs react@"^18.0.0". The developer attempts manual resolution by pinning @types/react, but the error cascades through the tree because npm 7\+ uses @npmcli/arborist which strictly enforces peer dependency compatibility graphs. After investigating the npm RFC for peer dependencies \(RFC 0025\), the realization hits that npm 7 changed peer deps from warnings to hard blockers. The --legacy-peer-deps flag works because it instructs Arborist to use the legacy peer dependency resolution algorithm, effectively simulating npm 6 behavior where conflicting peer deps were allowed to coexist at different levels of the tree.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T22:50:26.508309+00:00— report_created — created