できない.dev

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 で一時回避する。

よくある原因

  1. peer の衝突: パッケージ A が react@^17、パッケージ B が react@^18 を要求し両立できない
  2. npm のバージョン差: npm 7 以降の厳格化により、以前は通っていた構成がエラーになる
  3. 追従漏れ: 本体ライブラリをメジャー更新したのに、対応していない古いプラグインを併用している
  4. 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-deps

npm 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.0react-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 時点の出力

この記事は役立ちましたか?