環境
- Windows 11
- npm 8.15.0
エラー内容
以前、npm installしようとすると以下のようなエラーに遭遇することがあった
npm install hogehoge
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
原因
※原因は以下以外にも考えられるので、注意(あくまで参考にしてください)
- peerDependenciesはnpm7からインストールの挙動について破壊的な変更が加わった
- npm v6以前では、peerDependenciesはあくまでユーザーに対するヒントでしかなく、peerDependenciesに指定されているパッケージの依存関係を解決したり、自動でインストールしたりすることはなかった
- v7から、peerDependenciesに指定したパッケージを自動でインストールするようになった(npm installするとpeerDependenciesに記載されているパッケージもインストールされ、peerDependenciesと矛盾するバージョンのパッケージがインストールされていたり、そもそもインストール自体されていないと、npm v7は依存関係の解決に失敗したとしてインストール時にエラーを吐く)
対処方法
- 素直に、インストールされていないといわれているライブラリをpackage.jsonに追記してnpm installする
- 何かしらの理由で上流モジュールの修正が出来ない場合は、以下のコマンドでnpm7以前の依存関係のpeerDependenciesの処理をnpm6系と同じように処理させることでエラーを回避する
npm install xxxx --legacy-peer-deps
なお、特定のモジュールのpeerDependenciesをチェックするするには、以下のようにnpm infoを使用することで可能です(各 peerDependencyの名称と互換性のあるすべてのバージョンを返してくれる)
npm info @typescript-eslint/eslint-plugin peerDependencies
{
'@typescript-eslint/parser': '^5.0.0',
eslint: '^6.0.0 || ^7.0.0 || ^8.0.0'
}
まとめ
いかがでしたでしょうか。本記事では、本記事では、npmのpeerDependenciesの挙動について説明しました。npmのバージョン6からpeerDependenciesの挙動に破壊的な変更が加わり、それが原因で本エラーが生じたため、具体的な対応策とともに紹介していますので、ぜひ参考にしてみてください