最近、Yarn を使用して Node パッケージをインストールしようとしました。うまく機能し、NPM よりもはるかに高速です。糸は自動的に生成されyarn.lock
ます。すでに NPM シュリンクラップ ( npm-shrinkwrap.json
) があります。
それらの間に違いはありますか?npm- shrinkwrap.jsonyarn.lock
よりも利点がありますか?
このyarn.lock
ファイルは、他のパッケージ マネージャーのロック ファイル、特に Rust の Cargo パッケージ マネージャーに非常によく似ており、Cargo.lock
. これらのロック ファイルの考え方は、常に機能するパッケージの一貫したセットを表すことです。
npm
は依存関係の範囲をpackage.json
ファイルに保存します。つまり、誰かがあなたのパッケージをインストールすると、古いパッケージを実行している可能性があるため、別の依存関係のセットを取得する可能性があります (ただし、指定した依存関係の範囲はまだ満たしています)。たとえば、依存関係を指定した人を考えてみましょう"foo": "^1.0.0"
。彼らは実際には foo v1.0.1 をインストールしたかもしれません。なぜならそれが彼らが実行したときは最新だったからnpm install
です。これにより、予期せず何らかの問題が発生する可能性がありますが、一貫したパッケージ解決yarn.lock
を保証するファイルがあれば回避できます。
との比較についてnpm shrinkwrap
は、ドキュメントで非常に明確に説明されています。
npm の npm-shrinkwrap.json に似ていますが、損失がなく、再現可能な結果が作成されます。
yarn.lock
このドキュメントでは、まだコミットしていない場合は、リポジトリにコミットすることも推奨しています。これにより、一貫した再現可能なパッケージ解決の利点を享受できます。この質問では、これを行う必要がある理由についても説明しています。
の非可逆動作は、それ自体でnpm shrinkwrap
使用される非決定論的アルゴリズムによるものです。npm
別の回答のコメントに記載されているように、npm shrinkwrap
> npm install
>npm shrinkwrap
は1回のシュリンクラップと同じ出力を生成することが保証されていませんが、Yarnは「決定論的で信頼できるインストールアルゴリズム」を明示的に使用しています。
それらの間に違いはありますか
Yarn は、 と比較して、より決定論的なアルゴリズムに従いますnpm shrinkwrap
。Yarn を使用している場合、shrinkwrap を使い続けるのは直感に反する
これは、次のドキュメントでyarn.lock
見つけることができます。
npm の npm-shrinkwrap.json に似ていますが、損失がなく、再現可能な結果が作成されます。
ただし、糸が生産準備が整っているかどうかはまだ疑問が残ります。GitHub リポジトリにはまだ明らかなバグがたくさんあるので、1 か月ほど待つことにします。