npm の ERESOLVE エラー:原因と解決策
結論 ERESOLVE unable to resolve dependency tree は、npm が依存関係の木を組み立てられなかったという意味です。実装では、peer 依存の衝突を解決できなかった時点で unable to resolve dependency tree という文言のエラーが投げられます。 読むべき場所は3か所です。While resolving: は何を導入しようとしていたか、Found: は木に既にある物、Could not resolve dependency: は満たせなかった要求です。この3行を突き合わせれば、どのバージョンとどの要求がぶつかっているかがその場で分かります。 --force や --legacy-peer-deps を付ければ先へ進めますが、これは衝突を解決するのではなく、誤った可能性のある解決を受け入れるという操作です。出力の最後の行にもそう書かれています。まず衝突の中身を読んでください。 最初に確認すること 画面に出る説明は深さ4段までに省略されています。全文はキャッシュの置き場に eresolve-report.txt として書き出されており、こちらには省略のない説明と機械可読の内容が入っています。 cat "$(npm config get cache)/eresolve-report.txt" 深い階層で起きている衝突は、画面の出力だけでは追い切れません。相手が分からないときは、まずこのファイルを開いてください。 次に、npm 自身のバージョンを確認します。peer 依存を厳密に扱う挙動は npm 7 からで、6 以前とは結果が変わります。 npm --version 原因別の確認方法と解決策 原因1:直接指定した2つのパッケージが、同じ物に別の版を求めている 最も多い形です。Found: に出ている版と、Could not resolve dependency: の peer の範囲を見比べてください。両方とも from the root project と書かれていれば、自分の設定ファイルで指定した2つがぶつかっています。 対処は指定の見直しです。どちらかを、相手の peer の範囲に収まる版へ揃えます。 npm view some-lib@2.0.0 peerDependencies 原因2:上流のパッケージが古い範囲のまま更新されていない Could not resolve dependency: の peer が、自分では指定していないパッケージから出ている場合です。更新版が出ていれば、それで解消します。 ...