[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
質問
このドキュメント は、私の質問に対して非常に稚拙な回答をしています。私はこれらの説明を理解できませんでした。どなたかもっと簡単な言葉で説明していただけませんか?もし簡単な言葉を選ぶのが難しいのであれば、例を挙げて教えてください。
EDIT
を追加しました。
peerDependencies
というのがありますが、これは密接に関連しており、混乱を招く可能性があります。
どのように解決するのですか?
重要な動作の違いのまとめ。
-
dependencies
は両方にインストールされています。-
npm install
を含むディレクトリからpackage.json
-
npm install $package
他のディレクトリで
-
-
devDependencies
があります。-
にもインストールされています。
npm install
を含むディレクトリにpackage.json
を渡さない限り--production
フラグを立てる(アップボーテに行く ガヤン・チャリス さんの回答 ). -
にはインストールされません。
npm install "$package"
を与えていない限り、他のディレクトリにある--dev
オプションで指定します。 - は過渡的にインストールされない。
-
にもインストールされています。
-
- 3.0 より前のバージョン: 不足している場合は常にインストールされ、互換性のない複数のバージョンが異なる依存関係によって使用されることになる場合はエラーを発生させます。
-
3.0での開始を予定
(未検証): で見つからない場合は警告を表示する。
npm install
そのため、依存関係を手動で解決する必要があります。実行時に、依存関係が見つからない場合は、エラーになります。 ネクストジェンテック このように説明されています。 https://flaviocopes.com/npm-peer-dependencies/ - バージョン7で アップストリームの依存関係の衝突が自動的に解決されない限り、peerDependencies は自動的にインストールされます。
-
Transitivity (言及されている ベン・ハッチソン ):
-
dependencies
AがBを必要とし、BがCを必要とする場合、Cがインストールされ、そうでなければ、Bは動作せず、Aも動作しない。 -
devDependencies
は過渡的にインストールされるものではありません。例:AをテストするためにBをテストする必要はないので、Bのテストの依存関係を省くことができる。
-
ここで説明されていない関連オプション。
-
bundledDependencies
というのは、次の質問で取り上げています。 npm の bundledDependencies が通常の依存関係より優れている点 -
optionalDependencies
(前述 by Aidan Feldman )
devDependencies
dependencies
を実行するために必要です。
devDependencies
ユニットテスト、CoffeeScriptからJavaScriptへの変換、最小化、...など。
パッケージを開発する場合は、ダウンロード(例えば
git clone
を含むルートに移動し、そこで
package.json
を実行します。
npm install
実際のソースを持っているのだから、開発したいのは明らかなので、デフォルトでは、両方の
dependencies
(もちろん、開発するためには実行しなければならないので) と
devDependency
の依存関係もインストールされます。
しかし、パッケージをインストールして使いたいだけのエンドユーザーであれば、どのディレクトリからでもよいでしょう。
npm install "$package"
その場合、通常、開発用の依存関係は必要ないので、パッケージを使用するために必要なものだけを取得します。
dependencies
.
その際、どうしても開発用パッケージをインストールしたい場合は
dev
設定オプションに
true
というように、場合によってはコマンドラインから
npm install "$package" --dev
オプションは
false
というのは、このようなケースはあまりないためです。
ピアデペンデンス
(3.0以前でテスト済み)
出典 https://nodejs.org/en/blog/npm/peer-dependencies/
通常の依存関係では、複数のバージョンの依存関係を持つことができます。
node_modules
を使用します。
例:もし
dependency1
と
dependency2
はどちらも
dependency3
をクリックすると、異なるバージョンのプロジェクトツリーが表示されます。
root/node_modules/
|
+- dependency1/node_modules/
| |
| +- dependency3 v1.0/
|
|
+- dependency2/node_modules/
|
+- dependency3 v2.0/
しかし、プラグインは通常、もう一方のパッケージを必要としないパッケージで、これは ホスト ということです。その代わり
- プラグインが必要です ホストによって
- プラグインは、ホストが期待する標準的なインターフェイスを提供します。
- はホストだけがユーザーから直接呼び出されるため、そのバージョンは1つでなければなりません。
例)もし
dependency1
と
dependency2
に依存している。
dependency3
の場合、プロジェクトツリーは次のようになります。
root/node_modules/
|
+- dependency1/
|
+- dependency2/
|
+- dependency3 v1.0/
これは、あなたが
dependency3
の中で
package.json
ファイルを作成します。
のインスタンスだと思います。 制御の逆転 のデザインパターンです。
ピア依存の典型的な例として、ホストであるGruntとそのプラグインがあります。
例えば、以下のようなGruntのプラグインで https://github.com/gruntjs/grunt-contrib-uglify と表示されます。
-
grunt
はpeer-dependency
-
唯一の
require('grunt')
の下にあります。tests/
: 実際にはプログラムでは使用されません。
次に、ユーザーがプラグインを使用する場合、暗黙のうちにプラグインを
Gruntfile
を追加することで
grunt.loadNpmTasks('grunt-contrib-uglify')
という行がありますが、これは
grunt
を直接呼び出すことになります。
この場合、各プラグインが異なるバージョンのGruntを必要とする場合、うまくいきません。
マニュアル
多分、あなたはnodeや他のパッケージマネージャに十分な知識がないだけだと思います。私はRubyのbundlerについて少し知っているので、おそらくそれを理解するだけです。
肝心のセリフは。
これらは、パッケージのルートから npm link または npm install を行う際にインストールされ、他の npm 設定パラメータと同様に管理することができます。このトピックについて詳しくは npm-config(7) を参照してください。
そして、npm-config(7)の下にある
dev
:
Default: false
Type: Boolean
Install dev-dependencies along with packages.
関連
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] -saveと-save-devの違いは何ですか?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] npxとnpmの違い?
-
[解決済み] Node.jsのNPMモジュール(package.json)のdevDependenciesのインストールを防ぐにはどうすればよいですか?
-
[解決済み] npm install vs. update - 違いは何ですか?
-
[解決済み] npm install」と「npm ci」の違いは何ですか?
-
[解決済み】npm package.jsonでdevDependenciesからdependenciesにモジュールを移動させる。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] joiライブラリを使用して2つの時間を比較する方法
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] エラーです。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりません。
-
[解決済み] 続編のパッケージが解決できない
-
[解決済み] -saveと-save-devの違いは何ですか?
-
[解決済み] Node.jsのNPMモジュール(package.json)のdevDependenciesのインストールを防ぐにはどうすればよいですか?
-
[解決済み] npm -Dフラグの意味は何ですか?