npmで指定できますbundledDependencies
が、そうすることの利点は何ですか?参照しているモジュールが削除された場合でも、正しいバージョンを確実に取得したいのか、それともバンドルによって速度が向上するのでしょうか。
bundledDependencies
通常の依存関係に対する利点を知っている人はいますか?
npmで指定できますbundledDependencies
が、そうすることの利点は何ですか?参照しているモジュールが削除された場合でも、正しいバージョンを確実に取得したいのか、それともバンドルによって速度が向上するのでしょうか。
bundledDependencies
通常の依存関係に対する利点を知っている人はいますか?
クイックリーダーの場合:このQAは、パッケージに関するものではなく、 package.jsonbundledDependenciesフィールドです。
「bundledDependencies」は、まさにその名前が意味するものです。プロジェクト内にあるべき依存関係。したがって、機能は基本的に通常の依存関係と同じです。実行時にもパックされますnpm pack
。
通常の依存関係は通常、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に似ていますが、損失がなく、再現性のある結果が得られます。
npm
yarn
とりわけ、その機能を実際にコピーしました。
npm shrinkwrap
ほとんどの時間を使用し、場合によってはnode_moduleフォルダーを含むすべてのものをコードリポジトリに配置することでした。または、shrinkpackを使用することもできます。当時のベストプラクティスは、node.jsブログとjoyent開発者のWebサイトで議論されていました。これは質問の範囲から少し外れていますが、最後の種類の依存関係(私が知っている)であるピア依存関係について言及したいと思います。また、この関連するSOの質問yarn
と、場合によってはbundledDependenciesのドキュメントも参照してください。
Nodeの現在の最大の問題の1つは、Nodeの変化の速さです。これは、生産システムが非常に壊れやすく、npm update
物事を簡単に壊す可能性があることを意味します。
bundledDependenciesを使用することは、正しく推測しているように、他に何が変更されても常に正しい依存関係を提供することを保証することにより、この問題を回避する方法です。
これを使用して、独自のプライベートバンドルをバンドルし、インストールで配信することもできます。
他の利点は、内部依存関係(アプリケーションコンポーネント)をそこに配置し、lib /を乱雑にしてnpmに公開する代わりに、それらを独立したモジュールであるかのようにアプリに要求できることです。
それらが別々のモジュールとして存在できるようになるまで成熟した場合、コードを変更することなく、それらをnpmに簡単に配置できます。
これがまだここに表示されていないことに驚いていますが、慎重に選択すると、構成されていないシステムで実行されるbundledDependencies
配布可能なパッケージを作成するために使用できます。これは、たとえば、ネットワークに接続されていない/インターネットに接続されていないシステムがある場合に役立ちます。パッケージをサムドライブ(またはその他)に持ってきて、tarballを解凍すると、またはそれだけで機能します。npm pack
npm
npm run
node index.js
「オフライン」で実行するためにアプリケーションをバンドルするより良い方法があるかもしれませんが、ある場合はそれが見つかりません。
運用上、私はbundledDependenciesをモジュールのプライベートモジュールストアと見なします。依存関係はよりパブリックであり、モジュールとその依存関係(およびサブ依存関係)の間で解決されます。モジュールは、たとえばreactの古いバージョンに依存している可能性がありますが、依存関係には最新かつ最高のものが必要です。パッケージ/インストールの結果、ピン留めされたバージョンがnode_modules/$yourmodule/node_modules/react
になりますが、依存関係によってバージョンがになりますnode_modules/react
(またはnode_modules/$dependency/node_modules/react
その傾向がある場合)。
警告:最近、reactへの依存関係を適切に構成していない依存関係に遭遇し、bundledDependenciesでreactを実行すると、その依存モジュールが実行時に失敗しました。