91

npmで指定できますbundledDependenciesが、そうすることの利点は何ですか?参照しているモジュールが削除された場合でも、正しいバージョンを確実に取得したいのか、それともバンドルによって速度が向上するのでしょうか。

bundledDependencies通常の依存関係に対する利点を知っている人はいますか?

4

5 に答える 5

111

クイックリーダーの場合:このQAは、パッケージに関するものではなく、 package.jsonbundledDependenciesフィールドです。

bundledDependenciesの機能

「bundledDependencies」は、まさにその名前が意味するものです。プロジェクト内にあるべき依存関係。したがって、機能は基本的に通常の依存関係と同じです。実行時にもパックされますnpm pack

いつ使用するか

通常の依存関係は通常、npmレジストリからインストールされます。したがって、バンドルされた依存関係は次の場合に役立ちます。

  • npmレジストリからのものではない、または変更されたサードパーティのライブラリを再利用したい
  • 自分のプロジェクトをモジュールとして再利用したい
  • モジュールと一緒にいくつかのファイルを配布したい

このように、独自のnpmリポジトリを作成(および維持)する必要はありませんが、npmパッケージから得られるのと同じ利点を得ることができます。

バンドルされた依存関係を使用しない場合

開発するときは、偶発的な更新を防ぐことが重要だとは思いませんが。そのためのより優れたツール、つまりコードリポジトリ(git、mercurial、svn ...)があるか、ファイルをロックするようになりました。

パッケージバージョンを固定するには、次を使用できます。

  • オプション1:ノード8に付属する新しいNPMバージョン5を使用します。package-lock.jsonファイルを使用します(ノードブログおよびノー​​ド8リリースを参照) 。

  • オプション2:の代わりにを使用しnpmます。これはFacebookのパッケージマネージャーであり、ファイルnpmを使用するよりも高速です。yarn.lockそれ以外は同じものを使用しpackage.jsonます。

これは、BundlerやCargoなどの他のパッケージマネージャーのロックファイルに相当します。これはnpmのnpm-shrinkwrap.jsonに似ていますが、損失がなく、再現性のある結果が得られます。

npmyarnとりわけ、その機能を実際にコピーしました。

  • オプション3:これは以前に推奨されていたアプローチでしたが、現在はお勧めしません。アイデアは、npm shrinkwrapほとんどの時間を使用し、場合によってはnode_moduleフォルダーを含むすべてのものをコードリポジトリに配置することでした。または、shrinkpackを使用することもできます。当時のベストプラクティスは、node.jsブログjoyent開発者のWebサイトで議論されていました。

も参照してください

これは質問の範囲から少し外れていますが、最後の種類の依存関係(私が知っている)であるピア依存関係について言及したいと思います。また、この関連するSOの質問yarnと、場合によってはbundledDependenciesのドキュメントも参照してください。

于 2014-07-30T18:34:12.967 に答える
50

Nodeの現在の最大の問題の1つは、Nodeの変化の速さです。これは、生産システムが非常に壊れやすく、npm update物事を簡単に壊す可能性があることを意味します。

bundledDependenciesを使用することは、正しく推測しているように、他に何が変更されても常に正しい依存関係を提供することを保証することにより、この問題を回避する方法です。

これを使用して、独自のプライベートバンドルをバンドルし、インストールで配信することもできます。

于 2012-07-02T11:13:18.907 に答える
23

他の利点は、内部依存関係(アプリケーションコンポーネント)をそこに配置し、lib /を乱雑にしてnpmに公開する代わりに、それらを独立したモジュールであるかのようにアプリに要求できることです。

それらが別々のモジュールとして存在できるようになるまで成熟した場合、コードを変更することなく、それらをnpmに簡単に配置できます。

于 2013-02-10T17:43:36.787 に答える
3

これがまだここに表示されていないことに驚いていますが、慎重に選択すると、構成されていないシステムで実行されるbundledDependencies配布可能なパッケージを作成するために使用できます。これは、たとえば、ネットワークに接続されていない/インターネットに接続されていないシステムがある場合に役立ちます。パッケージをサムドライブ(またはその他)に持ってきて、tarballを解凍すると、またはそれだけで機能します。npm packnpmnpm runnode index.js

「オフライン」で実行するためにアプリケーションをバンドルするより良い方法があるかもしれませんが、ある場合はそれが見つかりません。

于 2018-08-09T11:30:31.693 に答える
0

運用上、私はbundledDependenciesをモジュールのプライベートモジュールストアと見なします。依存関係はよりパブリックであり、モジュールとその依存関係(およびサブ依存関係)の間で解決されます。モジュールは、たとえばreactの古いバージョンに依存している可能性がありますが、依存関係には最新かつ最高のものが必要です。パッケージ/インストールの結果、ピン留めされたバージョンがnode_modules/$yourmodule/node_modules/reactになりますが、依存関係によってバージョンがになりますnode_modules/react(またはnode_modules/$dependency/node_modules/reactその傾向がある場合)。

警告:最近、reactへの依存関係を適切に構成していない依存関係に遭遇し、bundledDependenciesでreactを実行すると、その依存モジュールが実行時に失敗しました。

于 2017-08-21T17:56:58.757 に答える