npmでは bundledDependencies
を指定できますが、そうすることの利点は何ですか?参照するモジュールが削除された場合でも、適切なバージョンを確実に取得したい場合、またはバンドルにより速度が向上する場合があると思いますか?
誰でもbundledDependencies
が通常の依存関係より優れていることを知っていますか?
Nodeの現在の最大の問題の1つは、どれだけ速く変化するかです。これは、実稼働システムが非常に壊れやすく、npm update
は簡単に壊れる可能性があります。
BundledDependenciesを使用することで、他のどのような変更が行われようとも、常に正しい依存関係を提供することを正しく推測して、この問題を回避することができます。
また、これを使用して独自のプライベートバンドルをバンドルし、インストールで提供することもできます。
クイックリーダーの場合:このQAは package.json bundledDependenciesフィールド、 package についてnot.
「bundledDependencies」は、まさにその名前が意味するものです。プロジェクト内にあるべき依存関係。したがって、機能は基本的に通常の依存関係と同じです。 npm pack
の実行時にもパックされます。
通常、通常の依存関係はnpmレジストリからインストールされます。したがって、バンドルされた依存関係は次の場合に役立ちます。
この方法では、独自のnpmリポジトリを作成(および保守)する必要はありませんが、npmパッケージから得られるのと同じ利点を得ることができます。
しかし、開発するとき、主なポイントは偶発的な更新を防ぐことだとは思いません。そのためのより良いツール、すなわちコードリポジトリ(git、Mercurial、svn ...)、またはファイルをロックするツールがあります。
パッケージバージョンを固定するには、次を使用できます。
オプション1:ノード8に付属する新しいNPMバージョン5を使用します。package-lock.json
ファイルを使用します( node blog およびノード8リリースを参照)
Option2:npm
の代わりに yarn を使用します。 facebookのパッケージマネージャーであり、npm
よりも高速で、 yarn.lock
ファイルを使用します。それ以外は同じpackage.json
を使用します。
これは、BundlerやCargoなどの他のパッケージマネージャーのロックファイルに匹敵します。 npmのnpm-shrinkwrap.jsonに似ていますが、損失はなく、再現可能な結果を作成します。
npm
は、とりわけ、その機能をyarn
から実際にコピーしました。
npm shrinkwrap
を使用し、node_moduleフォルダを含むすべてのものをコードリポジトリに入れることでした。または、おそらく shrinkpack を使用します。当時のベストプラクティスは node.jsブログ および joyent developer Webサイトで議論されました。これは質問の範囲外ですが、最後の種類の依存関係(私が知っている)について言及したいと思います。 ピア依存関係 。また、これを参照してください related SO question およびおそらく bundledDependencies のyarn
のドキュメント。
その他の利点は、内部の依存関係(アプリケーションコンポーネント)をそこに配置し、lib /を混乱させてnpmに公開する代わりに、独立したモジュールであるかのようにアプリでそれらを要求できることです。
それらが別々のモジュールとして存在できる程度に成熟した場合、コードを変更せずに簡単にnpmに配置できます。
ここにはまだ表示されていませんが、注意深く選択すると、bundledDependencies
を使用して、npm
が設定されていないシステムで実行されるnpm pack
から配布可能なパッケージを生成できます。これは、たとえばネットワークに接続されていない/インターネットに接続されていないシステム:パッケージをサムドライブ(またはその他)に持ち込み、tarballを展開してから、npm run
またはnode index.js
を実行します。
「オフライン」で実行するためにアプリケーションをバンドルするより良い方法があるかもしれませんが、もしあれば私はそれを見つけていません。
運用上、bundledDependenciesはモジュールのプライベートモジュールストアと見なされます。依存関係はより公開され、モジュールとその依存関係(およびサブ依存関係)の間で解決されます。モジュールは、たとえばリアクションの古いバージョンに依存する場合がありますが、依存関係には最新かつ最高のものが必要です。パッケージ/インストールにより、node_modules/$yourmodule/node_modules/react
、依存関係のバージョンはnode_modules/react
(またはnode_modules/$dependency/node_modules/react
そうした傾向がある場合)。
警告:最近、reactの依存関係を適切に構成しない依存関係に遭遇しました。bundledDependenciesで反応すると、実行時に依存モジュールが失敗しました。