7

私はcomposer. 私はgulp(など)ビルドプロセスに取り掛かり、学習nodeと使用方法を進めてnpmいます。

のようなマニフェストがデフォルトで含まれていないのは非常に奇妙です (これもcomposerバックグラウンドから来ています)。composer.lockそうは言っても、[shrinkwrap]、[npm-lockdown]、および [npm-seal] に関するドキュメントを読んでいます。...そして、ドキュメントを読めば読むほど、どちらを選択すべきか混乱します (誰もが自分のやり方が最善の方法だと考えています)。私が気付いた問題の 1 つは、npm-seal4 年とnpm-lockdown8 か月間変更されていないことnpmです。

  1. それぞれの利点/欠点は何ですか?
  2. プロジェクト A では別のものを使用し、プロジェクト B では別のものを使用するのはどのような場合ですか?
  3. それぞれが開発ワークフローにどのように影響しますか?

PS: それぞれの最も基本的な実装例を含めれば、Brownie は指摘します。;)

4

3 に答える 3

7

npm shrinkwrap依存関係をロックする最も標準的な方法です。はい、npm installデフォルトでは作成されませんが、これは残念なことであり、npm 作成者は間違いなく変更する必要があります。

npm-lockdownは と同じことをしようとしていますが、より優れnpm shrinkwrapているマイナーな点が 2 つありnpm-lockdownます。オプションの依存関係をより適切に処理し、パッケージのチェックサムを検証します。

https://www.npmjs.com/package/lockdown#related-tools

これらの機能はどちらも私にはあまり関係がないようです。私は非常に満足していnpm shrinkwrapます: たとえば、npmjs は、特定のバージョンで特定のパッケージをアップロードすると、それが不変のままであることを保証します。

sealと一緒に使用することを意図していnpm shrinkwrapます。「チェックサム チェック」の側面を追加します。それは見捨てられ、かなり生々しく見えます。

于 2016-01-10T11:32:19.800 に答える
3

良い質問です-すべてをスキップしますが、 NPM の docsshrinkwrapに従って、これが事実上の方法であるためです。

簡単に言えば、このファイルは、他のすべてのパッケージ マネージャーで使い慣れたnpm-shrinkwrap.jsonファイルに似ていますが、NPM では、同じパッケージの異なるバージョンを分離することでうまく連携させることができます。文字通り、異なるバージョン全体をツリーの異なるレベルにスコープしてコピーします。 . 互いに親子関係にある 2 つのプロジェクトがまったく同じバージョンを使用している場合、NPM はそのバージョンを親のみにコピーし、子はツリーを上に移動してパッケージを見つけます。locknode_modules

ベスト プラクティスはpackage.json、直接の依存関係を更新し、 を実行npm installし、開発中に動作していることを確認してnpm shrinkwrapから、コミットしてプッシュしようとしているときに実行することです。注:rm npm-shrinkwrap.jsonアクティブな開発中に実行する前に確認してください-直接の依存関係が変更された場合、ロックではなく使用しnpm installたいです!package.jsonまた、ソース管理システムにnode_modules自分のまたは同等のものを含めます。.gitignore次に、プロジェクトをデプロイして実行するときは、npm install通常どおり実行します。npm がnpm-shrinkwrap.jsonファイルを見つけると、それを使用してロックされているすべてのモジュールを再帰的にプルしpackage.json、プロジェクトとすべての依存プロジェクトの両方で無視します。

于 2016-01-10T04:07:37.340 に答える
2

シュリンクパックが便利だと思うかもしれません– tarball をチェックインしてnpm installダウンロードし、それらをリポジトリにバンドルしてから、最終的に npm-shrinkwrap.json を書き換えて、代わりにそのローカル バンドルを指すようにします。

このようにして、プロジェクトは完全にロックダウンされ、完全にオフラインで利用可能になり、インストールがはるかに速くなります。

于 2016-07-15T08:26:29.500 に答える