59

最近、Yarn を使用して Node パッケージをインストールしようとしました。うまく機能し、NPM よりもはるかに高速です。糸は自動的に生成されyarn.lockます。すでに NPM シュリンクラップ ( npm-shrinkwrap.json) があります。

それらの間に違いはありますか?npm- shrinkwrap.jsonyarn.lockよりも利点がありますか?

4

2 に答える 2

55

この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は「決定論的で信頼できるインストールアルゴリズム」を明示的に使用しています。

于 2016-10-15T09:50:38.407 に答える
5

それらの間に違いはありますか

Yarn は、 と比較して、より決定論的なアルゴリズムに従いますnpm shrinkwrap。Yarn を使用している場合、shrinkwrap を使い続けるのは直感に反する

これは、次のドキュメントでyarn.lock見つけることができます。

npm の npm-shrinkwrap.json に似ていますが、損失がなく、再現可能な結果が作成されます。

ただし、糸が生産準備が整っているかどうかはまだ疑問が残ります。GitHub リポジトリにはまだ明らかなバグがたくさんあるので、1 か月ほど待つことにします。

于 2016-10-15T09:52:17.663 に答える