最近、YarnでNodeパッケージをインストールしようとしました。それはうまく機能し、NPMよりもはるかに高速です。Yarnはyarn.lock
。 NPMシュリンクラップ(npm-shrinkwrap.json
)。
それらの間に違いはありますか? yarn.lock
はnpm-shrinkwrap.jsonよりも有利ですか?
yarn.lock
ファイルは、他のパッケージマネージャーのロックファイル、特にCargo.lock
を持つRustのCargoパッケージマネージャーと非常に似ています。これらのロックファイルの考え方は、常に機能するはずのパッケージの一貫したセットを表すことです。
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は "an install確定的で信頼できるアルゴリズム」 。
それらの間に違いはありますか
ヤーンは、npm shrinkwrap
と比較して、より決定的なアルゴリズムに従います。糸を使用している場合、シュリンクラップを使用し続けると直観に反します
これは yarn.lock
のドキュメント で見つけることができます:
Npmのnpm-shrinkwrap.jsonに似ていますが、損失がなく、再現可能な結果を作成します
しかし、糸が生産準備ができているかどうかという疑問はまだ残っています。 GitHubリポジトリには未解決のバグが多数残っているため、1か月ほど待ちます。