2016-08-18 26 views
13
$ npm install 
[email protected] /Users/antpaw/my_module 
├── [email protected] 
└── UNMET PEER DEPENDENCY [email protected]^2.74.0 

npm WARN [email protected] requires a peer of [email protected]^2.74.0 but none was installed. 

これは警告に過ぎないことを私は理解していません。 「リクエスト」がインストールされておらず、私のアプリがクラッシュする場合は、私のアプリにとってかなり大きな問題です。ピア依存性が満たされていない場合、または1で終了しますnpm do-i-have-everything-i-need-installedコマンドのようなものがあるかどうnpmピア依存関係チェック

は、どのように私は1npm installの出口を作ることができますか?

+0

設計どおりに動作します。モジュールがインストールされているときに 'dependency'を使うときに依存関係をインストールしたいならば。コンシューマにどのバージョンの 'request'がインストールされているのかを管理させたい場合は、' peerDependency'を使います。この方法でインストールするには、2つの手順が必要です。あなたがインストールに失敗した場合は3つではありません... メジャーバージョンへの依存性を「2倍」にする方が良いでしょう。つまり、インストールされますが、コンシューママシンでは削除されます。密接に関連している:http://stackoverflow.com/questions/35207380/how-to-install-npm-peer-dependencies-automatically –

答えて

4

に見えます/前(私は順序は関係ないと思います)私は1で終了しますnpm install my_moduleを実行するために必要な一般的なnpm installを行った後。これは、私が必要とするもの(peerDependenciesで定義されているもの)をCIスクリプトに確実に収めたいモジュールのリストを定義することができますが、それは何も意味がありません。

したがってnpm installは、あなたのpackage.jsonで定義するナンセンスの種類にかかわらず中断しません。あなたがpackage.jsonにナンセンスを持っていると、npm install module_nameが壊れます。

3

ほとんどの場合、npm @ 3(バージョン3)を使用しています。

ドキュメントで指定されているように、npmバージョン1と2はほとんどの場合peerDependenciesのインストールに使用されました。 Npmバージョン3ではこの動作が変更され、peerDependenciesはインストールされませんが、代わりにpeerDependenciesがインストールされていない場合は警告が表示されます。

npmバージョン1と2は、依存関係ツリーの上位に明示的に依存していない場合、自動的にpeerDependenciesをインストールします。 npm(npm @ 3)の次のメジャーバージョンでは、これはもはや当てはまりません。 peerDependencyが代わりにインストールされていないという警告が表示されます。 peerDependenciesが誤って使用されている時間のpeerDependenciesまたは大部分を使用している場合

変化の背後にある理由は、依存関係の地獄を避けるために、大部分でした。 peerDependenciesに関してnpm Githubにはいくつかの問題を説明し、解決策を導き出さなかった理由は何ですかpeerDependenciesのような多くの問題があります。

requestがインストールされていないとアプリケーションがクラッシュした場合、ほとんどの場合、アプリケーションがクラッシュします。 NPM環境では、現時点では、dependenciesはあなたrequire()devDependencies

peerDependenciesは、もともとほとんど「プラグイン」のためだったのパッケージでの問題に対処するために設計されたあなたrequire()だけ発展のため、テストなどのパッケージされているパッケージです他のフレームワークやライブラリは、別の 'ホスト'パッケージを直接使用していない場合や、 'ホスト'パッケージを必要としている場合でも、別の 'ホスト'パッケージと共に使用するように設計されています。

たとえば、GruntプラグインはGruntで使用することを意図していますが、決してrequire('grunt');とは使用できません。 gruntdependenciesとして追加すると、決して使用されないパッケージの新しいダウンロード済みコピーが作成されます。たとえいくつかのプラグインが 'ホスト'パッケージに直接依存していて、dependenciesに 'ホスト'パッケージを指定していても、それは 'ホスト'パッケージの複数のコピーにつながります。 peerDependencies

は、「ホスト」のパッケージのバージョンに差し込まれたときに、パッケージが動作することを言うの方法ですので、あなたは、このパッケージをインストールする場合は、あなたはまた、この他のパッケージ手動をインストールする必要があります。

これは現在アプリケーションをインストールしていて、requestと表示されているため、インストールする必要があります古典的なdependenciesに私は、1で終了する方法を見つけたよう

+1

"peerDependenciesは、パッケージが 'ホストのバージョン' パッケージ"。まったく。ですから、私の質問はまだあります。これがどのように警告になるのでしょうか? NPMは私のホストパッケージが壊れていることを知っていて、それについて私に警告します(出口0で)? – antpaw

+1

'peerDependencies'の*現在のポイントは、エンドユーザがそれを管理し、依存関係を避けるためにインストールするようになりました。 'peerDependencies'がなくてインストールする必要がある場合にのみ警告します。あなたのためにはできません。自動インストールを行う唯一の方法は、peerDependenciesから離れて移動することです。 – HiDeo

+0

それは大きなポイントです、問題はそのポイントの実行です。私は同じモジュールの2つ以上の異なるバージョンがインストールされてしまう可能性があるので、 'dependecies 'を使って自動インストールをしたくないのです。私のusecaseは本当に悪いです(これは問題ではありません) 。だから私は 'peerDependencies'を使っているのです。 "... ...行方不明で、それをインストールする必要があります..." "どうしたらいいですか"という警告はどういう意味ですか、私には意味がありません。 – antpaw

関連する問題