このドキュメントは私の質問にほとんど答えていません。私はそれらの説明を理解していませんでした。誰かがもっと簡単な言葉で言うことができますか?簡単な言葉を選ぶのが難しい場合は、例を挙げてみませんか?
EDITも追加しましたpeerDependencies
。これは密接に関連しており、混乱を招く可能性があります。
重要な動作の違いの要約:
dependencies
両方にインストールされています:
npm install
を含むディレクトリから package.json
npm install $package
他のディレクトリnpm install
を含むディレクトリにもインストールされpackage.json
ます--production
(Gayan Charithの回答に賛成してください)。npm install "$package"
を指定しない限り、他のディレクトリにはインストールされません--dev
。npm install
、依存関係を手動で解決する必要があります。実行時に依存関係が欠落していると、エラーが発生します(@nextgentechで言及)推移性(npm package.jsonファイルの依存関係、devDependencies、peerDependenciesの違いは何ですか?言及):
dependencies
推移的にインストールされます。AがBを必要とし、BがCを必要とする場合、Cがインストールされます。そうでない場合、Bは機能せず、Aも機能しません。
devDependencies
推移的にインストールされません。たとえば、AをテストするためにBをテストする必要がないため、Bのテストの依存関係を省略できます。
ここで説明されていない関連オプション:
bundledDependencies
これは次の質問で説明されています:npmの通常の依存関係に対するbundledDependenciesの利点optionalDependencies
(npm package.jsonファイルの依存関係、devDependencies、peerDependenciesの違いは何ですか?言及)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/
ただし、プラグインは、通常は他のパッケージを必要としないパッケージであり、このコンテキストではホストと呼ばれます。代わりに:
たとえばdependency1
、dependency2
ピアがに依存しているdependency3
場合、プロジェクトツリーは次のようになります。
root/node_modules/
|
+- dependency1/
|
+- dependency2/
|
+- dependency3 v1.0/
これdependency3
は、package.json
ファイルで言及していなくても発生します。
ピアの依存関係の典型的な例は、Grunt、ホスト、およびそのプラグインです。
たとえば、https://github.com/gruntjs/grunt-contrib-uglifyのようなGruntプラグインでは、次のように表示されます。
grunt
は peer-dependency
require('grunt')
下にありtests/
ます:それは実際にはプログラムによって使用されていません。次に、ユーザーがプラグインを使用する場合、行をGruntfile
追加することで暗黙的にプラグインを要求しますが、ユーザーは直接呼び出します。grunt.loadNpmTasks('grunt-contrib-uglify')
grunt
各プラグインが異なるGruntバージョンを必要とする場合、これは機能しません。
ドキュメントは質問に非常によく答えていると思います。ノード/他のパッケージマネージャーに精通しているだけではないかもしれません。Rubyバンドラーについて少し知っているので、おそらくそれを理解するだけです。
重要な行は次のとおりです。
これらは、パッケージのルートからnpmlinkまたはnpminstallを実行するときにインストールされ、他のnpm構成パラメーターと同様に管理できます。このトピックの詳細については、npm-config(7)を参照してください。
そして、npm-config(7)の下で以下を見つけますdev
:
Default: false
Type: Boolean
Install dev-dependencies along with packages.
devDependenciesをインストールしたくない場合は、次を使用できます。 npm install --production
例として、mochaは通常devDependencyです。これは、本番環境ではテストが必要ないためですが、expressは依存関係になります。
依存
関係コードから呼び出す関数を提供するライブラリなど、プロジェクトを実行するために必要な依存関係。
それらは推移的にインストールされます(AがBに依存している場合はCに依存し、Aにnpm installを実行するとBとCがインストールされます)。
例:lodash:プロジェクトはいくつかのlodash関数を呼び出します。
devDependencies
コードを取得して、JavaScript、テストフレームワーク、またはドキュメントジェネレーターにコンパイルするコンパイラーなど、開発中またはリリース中にのみ必要な依存関係。
それらは推移的にインストールされません(AがBに依存している場合dev-Cに依存している場合、Aにnpm installを実行するとBのみがインストールされます)。
例:grunt:プロジェクトはgruntを使用して自身をビルドします。
peerDependencies
プロジェクトが親プロジェクトにフックする、または変更する依存関係。通常、他のライブラリまたはツールのプラグインです。これは、親プロジェクト(プロジェクトに依存するプロジェクト)がフックするプロジェクトに依存していることを確認するためのチェックを目的としています。したがって、ライブラリBに機能を追加するプラグインCを作成する場合、プロジェクトAを作成する人は、Cに依存している場合、Bに依存している必要があります。
インストールされていない(npm <3でない限り)。をチェックしました。
例:grunt:プロジェクトはgruntに機能を追加し、gruntを使用するプロジェクトでのみ使用できます。
このドキュメントでは、ピアの依存関係について詳しく説明しています:https://nodejs.org/en/blog/npm/peer-dependencies/
また、npmのドキュメントは時間の経過とともに改善され、さまざまなタイプの依存関係についてより適切に説明されるようになりました:https://github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies
パッケージをdev依存関係としてpackage.jsonに保存するには:
npm install "$package" --save-dev
実行npm install
すると、devDependencies
との両方がインストールされますdependencies
。インストールのdevDependencies
実行を回避するには:
npm install --production
開発にのみ必要なモジュールやパッケージがいくつかありますが、本番環境では必要ありません。それがドキュメントでそれを言うように:
誰かがプログラムでモジュールをダウンロードして使用することを計画している場合、おそらく、使用する外部テストまたはドキュメントフレームワークをダウンロードして構築することを望まないか、または構築する必要はありません。この場合、これらの追加アイテムをdevDependenciesハッシュにリストするのが最善です。
私にそれをより明確にした簡単な説明は次のとおりです:
アプリをデプロイするときは、依存関係にあるモジュールをインストールする必要があります。そうしないと、アプリは機能しません。devDependenciesのモジュールは、本番サーバーで開発していないため、本番サーバーにインストールする必要はありません。 リンク
これらの依存関係の説明に関する私の見解を回答に追加したいと思います
dependencies
コードベースで直接使用するために使用されます。通常は本番コードで使用されるもの、またはコードのチャンクです。devDependencies
ビルドプロセス、エンドコードの最終的な管理に役立つツール、サードパーティのテストモジュール(例:webpackのもの)に使用されます。peerDependencies
上記のCiroに関するブログ投稿からこのスニペットを読むまで、私にはまったく意味がありませんでした。
[プラグイン]に必要なのは、プラグインとそのホストパッケージの間のこれらの「依存関係」を表現する方法です。「ホストパッケージのバージョン1.2.xに接続した場合にのみ機能するので、インストールする場合は、互換性のあるホストと一緒にあることを確認してください。」この関係をピア依存関係と呼びます。
peerDependencies
プラグイン用であり、機能を実行するために「ホスト」ライブラリを必要とするライブラリですが、ホストの最新バージョンがリリースされる前に作成された可能性があります。
それは私が書いた場合、であるPluginX v1
ためHostLibraryX v3
と歩いて、保証はありますPluginX v1
時に動作しませんHostLibraryX v4
(あるいはHostLibraryX v3.0.1
解放されます)。
プラグインの観点からは、ホストライブラリに関数を追加するだけです。プラグインに依存関係を追加するためにホストを実際に「必要」とはしません。プラグインは文字通りホストに依存しないことがよくあります。ホストがない場合、プラグインは無害に何もしません。
これはdependencies
、プラグインにとって実際には正しい概念ではないことを意味します。
さらに悪いことに、私のホストが依存関係のように扱われた場合、同じブログ投稿で言及されているこの状況になります(この回答で構成されたホストとプラグインを使用するために少し編集されました):
しかし今、[HostLibraryXの最新バージョンをPluginXの依存関係として扱う場合]実行
npm install
すると、予期しない依存関係グラフが表示されます。├── [email protected] └─┬ [email protected] └── [email protected]
メインアプリケーションとは異なる[HostLibraryX] APIを使用するプラグインに起因する微妙な失敗は、想像に任せます。
...それがプラグインの要点です。これで、ホストがすべてのプラグインの依存関係情報を含めるのに十分な場合、問題は解決しますが、プラグイン管理という大きな新しい文化的問題も発生します。
プラグインの要点は、匿名でペアリングできることです。完璧な世界では、ホストにすべてを管理させることはきちんと整頓されていますが、図書館に猫の群れを要求することはありません。
代わりに、私たちは仲間であるという概念を持っています。ホストもプラグインも、もう一方の依存関係バケットにはありません。どちらも依存関係グラフの同じレベルにあります。
私は場合はPluginX v1
と期待して(、あるのピアのpeerDependencyを持っているが)HostLibraryX v3
、私はそう言うでしょう。あなたはきた最新の自動アップグレードした場合HostLibraryX v4
(ノートのバージョンその4)としているPlugin v1
インストールされ、あなたは、右知っている必要がありますか?
npm
私のためにこの状況を管理することはできません-
「ねえ、あなたが使っているのがわかります
PluginX v1
!私は自動的にHostLibraryX
v4からv3にダウングレードしています、kk?」
...または...
「使用して
PluginX v1
いるようです。HostLibraryX v3
前回の更新時にほこりの中に残っていたはずです。安全のため、自動的にアンインストールしますPlugin v1
!! 1!
いいえ、npmはどうですか?!
したがって、npmはそうではありません。状況を警告し、HostLibraryX v4
がに適したピアであるかどうかを判断できますPlugin v1
。
グッドpeerDependency
プラグインでの管理は、実際には、より直感的にこの概念の作業を行います。ブログ投稿から、またもや...
アドバイスの1つ:ピアの依存関係の要件は、通常の依存関係の要件とは異なり、寛大である必要があります。ピアの依存関係を特定のパッチバージョンに固定しないでください。1つのChaiプラグインがChai1.4.1にピア依存し、別のプラグインがChai 1.5.0に依存している場合、作成者が怠惰で、Chaiの実際の最小バージョンを理解するのに時間を費やさなかったため、非常に煩わしいでしょう。と互換性があります。
要するに
依存関係- npm install <package> --save-prod
アプリケーションに必要なパッケージを本番環境にインストールします。
DevDependencies - npm install <package> --save-dev
インストールパッケージは、ローカルの開発およびテストのために必要
入力npm install
するだけで、package.jsonに記載されているすべてのパッケージがインストールされます
したがって、ローカルコンピュータで作業している場合は、入力npm install
して続行してください:)
簡単な説明を見つけました。
短い答え:
依存関係 「...プロジェクトが本番環境で機能するために本当に必要な依存関係です。」
devDependencies 「...開発中に必要なものです。」
peerDependencies 「依存関係として使用できるように独自のライブラリを作成して公開する場合」
この投稿の詳細:https: //code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies
依存関係と開発者の依存関係
開発依存関係は、開発中にのみ必要なモジュールですが、依存関係は実行時に必要です。アプリケーションをデプロイする場合は、依存関係をインストールする必要があります。そうしないと、アプリが機能しなくなります。プログラムの実行を可能にするコードから呼び出すライブラリは、依存関係と見なすことができます。
例-React、React-dom
開発依存関係モジュールは、そのマシンで開発する予定がないため、本番サーバーにインストールする必要はありません。コードをjavascriptに変換するコンパイラー、テストフレームワーク、ドキュメントジェネレーターは、開発中にのみ必要になるため、開発依存関係と見なすことができます。
例-ESLint、Babel、webpack
@ご参考までに、
mod-a
dev-dependents:
- mod-b
dependents:
- mod-c
mod-d
dev-dependents:
- mod-e
dependents:
- mod-a
----
npm install mod-d
installed modules:
- mod-d
- mod-a
- mod-c
----
checkout the mod-d code repository
npm install
installed modules:
- mod-a
- mod-c
- mod-e
npmに公開している場合は、正しいモジュールに正しいフラグを使用することが重要です。npmモジュールが機能する必要がある場合は、「-save」フラグを使用してモジュールを依存関係として保存します。モジュールが機能する必要はないがテストには必要なものである場合は、「-save-dev」フラグを使用します。
# For dependent modules
npm install dependent-module --save
# For dev-dependent modules
npm install development-module --save-dev
npmパッケージを配布しようとするときは、の使用を避ける必要がありますdependencies
。代わりに、に追加するpeerDependencies
か、から削除することを検討する必要がありますdependencies
。
これらはパッケージを実行するために必要なパッケージであるため、ユーザーが実行するとインストールされます
npm install PACKAGE-NAME
例として、プロジェクトでjqueryを使用した場合があります。誰かがjqueryをインストールしていない場合、それは機能しません。依存関係として保存するには、
npm install --save
これらは開発で使用する依存関係ですが、ユーザーが使用している場合は必要npm install
ありません。したがって、ユーザーが実行する場合、必要がないため、インストールされません。たとえば、mochaを使用してテストする場合、人々はmochaを実行する必要npm install
がないため、インストールしません。開発依存として保存するには、
npm install PACKAGE --save-dev
これらは、依存関係として使用できるように独自のライブラリを作成して公開する場合に使用できます。たとえば、パッケージを別のプロジェクトの依存関係として使用したくない場合、プロジェクトを依存関係として持つプロジェクトを誰かがインストールしたときにも、これらがインストールされます。ほとんどの場合、ピア依存関係は使用しません。
Reba McEntire が息子の Shelby Blackstock と共有しているクリスマスの伝統について学びましょう。
メーガン・マークルとマライア・キャリーが自然な髪の上でどのように結合したかについて、メーガンの「アーキタイプ」ポッドキャストのエピソードで学びましょう.
ハリー王子が家族、特にチャールズ王とウィリアム王子との関係について望んでいると主張したある情報源を発見してください。
ワイノナ・ジャッドが、母親のナオミ・ジャッドが亡くなってから初めての感謝祭のお祝いを主催しているときに、彼女が今では家長であることをどのように認識したかを学びましょう.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
ランボルギーニの創設者であるフェルッチオランボルギーニが100歳になるのは毎日ではありません(そうです、彼は死んでいて、まだ死んでいると思います。
Appleが自動車分野に参入するという噂はかなり前から渦巻いており、AppleウォッチャーがSixtyEight Researchという会社がAppleの自動車研究開発のシェル会社である可能性が高いと判断したとき、その渦巻きは本当に渦巻いた。また、会社が購入した車は1台だけであることが知られており、その車はAppleが何を考えているかについての手がかりでいっぱいになる可能性があることも伝えています。
太陽系の外側にある架空の大きな物体である惑星Xの探索は、何十年にもわたって人間を魅了してきました。その検索の最新の章は、地球の10倍の大きさで、公転周期が15であるほど遠くにある惑星を指しています。
カムニュートンは昨日、簡単な265ヤードと3回のタッチダウンでファルコンズを引き裂き、別の素晴らしいゲームをしました。その日のハイライトは、上のタッチダウンスローでした。これは、視聴するたびにばかげているだけです。
ロシアのフィギュアスケーター、カミラ・バリエバが関与したドーピング事件が整理されているため、チームは2022年北京冬季オリンピックで獲得したメダルを待っています。
何千人ものAmazonの買い物客がMulberry Silk Pillowcaseを推奨しており、現在販売中. シルクの枕カバーにはいくつかの色があり、髪を柔らかく肌を透明に保ちます。Amazonで最大46%オフになっている間にシルクの枕カバーを購入してください
ラファイエット警察署は、「不審な男性が女性に近づいた」という複数の苦情を受けて、12 月にパデュー大学の教授の捜査を開始しました。
私たちの周りの世界と同じように、言語は常に変化しています。以前の時代では、言語の変化は数年または数十年にわたって発生していましたが、現在では数日または数時間で変化する可能性があります。
認知症を患っている 91 歳のアジア人女性が最近、47 番街のアウター サンセット地区でロメオ ロレンゾ パーハムに襲われました。伝えられるところによると、被害者はサンフランシスコの通りを歩いていたところ、容疑者に近づき、攻撃を受け、暴行を受けました。
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
人々にチャンスを与えることは、人生で少し遅すぎると私は信じています。寛大に。