Masayan tech blog.

  1. ブログ記事一覧>
  2. npmのpeerDependenciesの挙動について

npmのpeerDependenciesの挙動について

公開日

環境

  • 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の挙動に破壊的な変更が加わり、それが原因で本エラーが生じたため、具体的な対応策とともに紹介していますので、ぜひ参考にしてみてください