npm install --legacy-peer-deps は具体的に何をするのでしょうか? いつ推奨されるのか / 潜在的な使用例は何ですか? 質問する

npm install --legacy-peer-deps は具体的に何をするのでしょうか? いつ推奨されるのか / 潜在的な使用例は何ですか? 質問する

次のエラーが発生しました:

npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! 
npm ERR! While resolving: [email protected]
npm ERR! Found: [email protected]
npm ERR! node_modules/react
npm ERR!   react@"17.0.1" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.8.0" from [email protected]
npm ERR! node_modules/react-hook-mousetrap
npm ERR!   react-hook-mousetrap@"*" from the root project
npm ERR! 

インストールしようとしているモジュールは、インストールしたものとは異なるピア依存関係を持っているようです。この点に関して npm の動作が変更されたようで、インストールが失敗するようになりました。

これを修正するにはどうすればいいでしょうか? このために React のバージョンをダウングレードしたくありません。

というフラグがあることは知っています--legacy-peer-depsが、これが正確に何をするのか、使用することが推奨されるのか、潜在的なデメリットは何かはわかりません。npm がインストールを失敗させたのには理由があると思います。

yarnつい最近まで使用していて、すべて問題なかったのに、不思議です。

ベストアンサー1

要約:

  • NPM v7+はpeerDependenciesをインストールしますデフォルトで; これは、NPM の以前のバージョンには当てはまりません。
  • NPMモジュールはpeerDependenciesの特定のバージョンに名前を付ける必要があります
  • peerDependencyがすでにインストールされているが、モジュールで指定されたバージョンではない場合は、NPM v7+はエラーをスローします。
  • 追加すると、--legacy-peer-depsこの新しい要件が無視され、破壊的な変更が導入されるリスクがあります。

--legacy-peer-deps は、NPM v4 から v6 までの peerDependency インストール動作を復元します。

このフラグについての 1 つの考え方は、何か新しいことを行っているのではなく、NPM v7では peerDependencies がデフォルトでインストールされるようになったため、NPM に何か新しいことを行わないように指示しているということです。

多くの場合、これによりバージョンの競合が発生し、インストール プロセスが中断されます。

--legacy-peer-depsこのフラグは、peerDependency の自動インストールをバイパスする方法として v7 で導入されました。このフラグは、NPM にピア依存関係を無視してインストールを続行するように指示します。これは、NPM v4 から v6 までの動作と同じです。

通常の deps と peer deps の違いがよくわからない場合は、次の点に注意してください。

依存関係と peerDependencies

依存関係: NPMモジュールが本番環境で動作するために必要なライブラリまたはモジュール。(例: 最近、円グラフのモックライブラリを構築しました。チャンス.js指定された範囲内で乱数を計算します。したがって、Chance は私のモジュールの依存関係です。

peerDependencies : ピア依存関係とは、モジュールが動作するように設計されたサードパーティのソフトウェア ライブラリの特定のバージョンまたはバージョンのセットです。概念的には、ブラウザ拡張機能とブラウザの関係に似ています。(例:反応Reduxには、2 つの非常に論理的な peerDependencies があります:reactおよびredux

この問題は、React v17+によって部分的に引き起こされています。

React v17 (または最近では React 18) を peerDependency として明示的に追加していないモジュールが多数あるため、unable to resolve dependency treev17 React アプリケーション内で npm インストールを実行すると、エラーが発生することが一般的になっています。

このエラーは、モジュール(またはその依存関係のいずれか)が、React v17を明示的に含めずに、React の以前のメジャー バージョンを peerDependency としてリストするたびに発生します。

(注:他のフレームワークやライブラリのメジャー バージョンの更新でも同様の動作が発生します。)

任意のモジュールの peerDependencies を確認する方法

NPM 自体は、特定のモジュールのページにピア依存関係をリストしません。ただし、インストール前またはインストール後にピア依存関係を確認する簡単な回避策があります。次のコマンドを実行するだけです。

npm info name-of-module peerDependencies

このコマンドは、各 peerDependency の名前と、互換性のあるすべてのバージョンを返します。

おすすめ記事