npmで指定できますがbundledDependencies
、そうすることの利点は何ですか?参照しているモジュールが削除された場合でも、正しいバージョンを確実に取得したいのか、それともバンドルによる速度の利点があるのでしょうか。
bundledDependencies
通常の依存関係に対する利点を知っている人はいますか?
npmで指定できますがbundledDependencies
、そうすることの利点は何ですか?参照しているモジュールが削除された場合でも、正しいバージョンを確実に取得したいのか、それともバンドルによる速度の利点があるのでしょうか。
bundledDependencies
通常の依存関係に対する利点を知っている人はいますか?
回答:
Nodeの現在の最大の問題の1つは、Nodeの変化の速さです。つまり、本番システムは非常に壊れやすく、npm update
簡単に壊れてしまう可能性があります。
bundledDependenciesを使用することは、正しく推測しているように、他に何が変更されても常に正しい依存関係を提供することを保証することによって、この問題を回避する方法です。
これを使用して、独自のプライベートバンドルをバンドルし、インストール時に配信することもできます。
npm update
、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を。
npm install -g shrinkpack
ツールを使用して、このプロセスを自動化できます。
これがまだここに表示されていないことに驚いていますが、慎重に選択すると、構成されていないシステムで実行される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を実行すると、その依存モジュールが実行時に失敗しました。