問題タブ [npm-shrinkwrap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
npm - JS パッケージにはシュリンクラップが必要ですか?
npm shrinkwrap
を使用すると、依存関係をロックダウンして、アプリケーションの複製可能なビルドを保証するのに役立つことを理解しています。
私の質問は、アプリケーションの代わりにモジュールを構築している場合はどうなるでしょうか? モジュールの各リリースには、npm-shrinkwrap.json
? いくつかのオープン ソース モジュールを調べましたが、それらのリポジトリでそれらを見たことはありません (たとえば、 express、react、chai、async )。
私の理解では、互換性のあるバージョンを統合することによって npm (>=3) が提供する利点があります。たとえば、pkg-a が lodash に依存し^4.0.0
、pkg-b が lodash^4.3.5
に依存している場合、最新の lodash 4 リリースの単一のコピーがインストールされます。しかし、pkg-a と pkg-b の両方がシュリンクラップを作成した場合、それらは完全に互換性のあるリリースであっても、まったく同じバージョンの lodash に対応していない可能性が高く、ライブラリの 2 つのコピーをインストールする必要があります。
シュリンクラップを含めないことの欠点は、ライブラリの作成者が、他のアプリケーションによって依存されるパッケージを構築していることであり、その依存関係 (または依存関係の依存関係、再帰的に) のいずれかが重大な変更をリリースすると、いつでも壊れる可能性があります。マイナーまたはパッチ リリース。また、依存関係の依存関係が壊れた場合、ライブラリの作成者がシュリンクラップを公開するために保存できることは何もありません。
たとえば、私のライブラリがrequestに依存しており、それがhawkに依存していて、hawk がパッチ リリースで重大な変更をリリースした場合、正確なバージョンの request にロックダウンしてもライブラリは修正されません。私のライブラリを修正するには、hawk の正確なバージョンを絞り込むシュリンクラップを公開する必要があります。
これは長くなりつつありますが、Nodeモジュールにshrinkwrapを使用するよりも、npmを使用しないことでnpmが提供する利点を利用する方が良いという議論があるかどうかを理解しようとしています.