npm install が「ERESOLVE unable to resolve dependency tree」で失敗する
npm 7 以降は peerDependencies を厳格に解決するため、依存同士の要求バージョンが食い違うと ERESOLVE で停止する。
原因の依存を更新するのが本筋で、暫定的には --legacy-peer-deps か overrides で回避する。
公開: 更新:
要約
npm ERR! ERESOLVE unable to resolve dependency tree は、依存パッケージ同士が要求する peerDependencies のバージョンが食い違っている ときに出る。
npm 7 以降は peer 依存を厳格に解決するため、npm 6 では警告で済んでいた不整合がインストールを止めるエラーになった。
正攻法は衝突元の依存を更新すること。
急ぐ場合は --legacy-peer-deps で一時回避する。
よくある原因
- peer の衝突: パッケージ A が
react@^17、パッケージ B がreact@^18を要求し両立できない - npm のバージョン差: npm 7 以降の厳格化により、以前は通っていた構成がエラーになる
- 追従漏れ: 本体ライブラリをメジャー更新したのに、対応していない古いプラグインを併用している
- lock 破損: 競合解決の途中で
package-lock.jsonが中途半端な状態のまま残っている
解決策
1. 衝突元を特定する
npm install 2>&1 | grep -A3 peer
npm ls reactエラーメッセージの Could not resolve dependency: と、その直後の peer … の行に、要求元のパッケージと要求バージョンが出る。
まずどのパッケージがどのバージョンを求めているかを確定させる。
解決アルゴリズムの詳細は npm install 公式ドキュメント(新しいタブで開く) を参照。
2. 原因パッケージを更新する
npm install plugin-foo@latest古いプラグイン側が新しい peer に対応したバージョンを出していれば、それを入れるのが最も健全。
対応版が無ければ代替ライブラリを検討する。
3. 一時的に回避する
npm install --legacy-peer-depsnpm 6 相当の「peer は警告のみ」に戻す。
CI を止めたくないときの応急処置で、根本解決ではない点に注意する。
インストール自体は成功するが、npm ls では依存ツリーが invalid のまま残るため、あくまで一時しのぎに留める。--force は壊れたツリーをそのまま許容してしまうため避ける。
4. overrides で固定する
{
"overrides": {
"react": "18.3.1"
}
}package.json の overrides(新しいタブで開く) で依存ツリー全体のバージョンを強制的に揃える。
回避策より明示的で再現性も高い。
最後に rm -rf node_modules package-lock.json && npm install でツリーを作り直す。
実行例
実際に上記の手順を node:20 環境で動かすと、react@18.2.0 と react-dom@17.0.2 の peer 不整合から ERESOLVE が発生し(終了コード 1)、--legacy-peer-deps でのインストール自体は成功するものの、npm ls では依存ツリーが invalid 状態のまま残ることが確認できる。
$ node -v
v20.20.2$ npm -v
10.8.2$ npm install --no-audit --no-fund
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: eresolve-repro@1.0.0
npm error Found: react@18.2.0
npm error node_modules/react
npm error react@"18.2.0" from the root project
npm error
npm error Could not resolve dependency:
npm error peer react@"17.0.2" from react-dom@17.0.2
npm error node_modules/react-dom
npm error react-dom@"17.0.2" from the root project
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.
npm error
npm error
npm error For a full report see:
npm error /root/.npm/_logs/2026-08-02T08_45_44_292Z-eresolve-report.txt
npm error A complete log of this run can be found in: /root/.npm/_logs/2026-08-02T08_45_44_292Z-debug-0.log
npm install の終了コード: 1$ npm install --no-audit --no-fund 2>&1 | grep -i "ERESOLVE\|peer\|Conflicting" | head
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error While resolving: eresolve-repro@1.0.0
npm error peer react@"17.0.2" from react-dom@17.0.2
npm error this command with --force or --legacy-peer-deps
npm error /root/.npm/_logs/2026-08-02T08_45_45_287Z-eresolve-report.txt$ npm install --legacy-peer-deps --no-audit --no-fund
added 6 packages in 1s
終了コード: 0(0 = ツリー作成に成功)$ npm ls react react-dom 2>&1 | head
eresolve-repro@1.0.0 /tmp/tmp.Her1vHURrQ
+-- react-dom@17.0.2
| `-- react@18.2.0 deduped invalid: "17.0.2" from node_modules/react-dom
`-- react@18.2.0 invalid: "17.0.2" from node_modules/react-dom
npm error code ELSPROBLEMS
npm error invalid: react@18.2.0 /tmp/tmp.Her1vHURrQ/node_modules/react
npm error A complete log of this run can be found in: /root/.npm/_logs/2026-08-02T08_45_46_958Z-debug-0.log— 2026-08-02 時点の出力