最近、NodeパッケージをYarnでインストールしようとしました。それは素晴らしく、NPMよりもはるかに高速です。ヤーンは自動的にyarn.lock
を生成します。我々はすでにNPMシュリンクラップ(npm-shrinkwrap.json
)を持っています。yarn.lockとnpmのシュリンクラップの違いは何ですか?
それらの間に違いはありますか? yarn.lock
はnpm-shrinkwrap.jsonより利点がありますか?
最近、NodeパッケージをYarnでインストールしようとしました。それは素晴らしく、NPMよりもはるかに高速です。ヤーンは自動的にyarn.lock
を生成します。我々はすでにNPMシュリンクラップ(npm-shrinkwrap.json
)を持っています。yarn.lockとnpmのシュリンクラップの違いは何ですか?
それらの間に違いはありますか? yarn.lock
はnpm-shrinkwrap.jsonより利点がありますか?
yarn.lock
ファイルは、他のパッケージマネージャーのロックファイル、特にRust's Cargoパッケージマネージャーによく似ています(Cargo.lock
)。これらのロックファイルのアイデアは、常に動作するパッケージの一貫したセットを表すことです。
npm
は、package.json
ファイルの依存関係の範囲を格納します。つまり、あなたが指定した依存関係の範囲を満たしていても、古いパッケージを実行している可能性があるため)。例えば、依存関係"foo": "^1.0.0"
を指定した人をとります。彼らは実際にfoo v1.0.1をインストールしたかもしれません。なぜなら、それはnpm install
を実行した最新のものですが、後で誰かがあなたのパッケージをインストールし、依存関係foo v1.1.0を取得します。これは予期しないことに壊れている可能性があります。これは、の一貫性のあるパッケージ解決を保証するyarn.lock
ファイルがある場合には避けることができます。
npm shrinkwrap
との比較については
、the documentationは非常に明確にそれを説明する:
それはしかし、それは非可逆ではありません、NPMのNPM-shrinkwrap.jsonに似て、それは再現性のある結果を作成します。
あなたはすでにこれをやっていない場合のドキュメントにも、あなたのリポジトリへのyarn.lock
をコミット助言、あなたが一貫して再現可能なパッケージ解像度の恩恵を享受することができます。 This questionも、なぜこれを行うべきかについてさらに説明しています。
npm shrinkwrap
のロッシー動作は、npm
によって使用される非決定論的アルゴリズムによるものです。別の答えのコメントに記載されているように、npm shrinkwrap
>npm install
>npm shrinkwrap
は、一度シュリンクラッピングと同じ出力を生成する保証はありませんが、Yarnは明示的に"an install algorithm that is deterministic and reliable"を使用します。
それらの間のいずれかの違いがあります糸
npm shrinkwrap
に比べて、より多くの決定論的なアルゴリズムに従います。あなたが糸を使用している場合は、シュリンクラップを使い続けることは
直感的だろうあなたはdocumentation for yarn.lock
でこれを見つけることができます:
それはNPMのNPM-shrinkwrap.jsonに似て、しかしそれは非可逆ではありませんし、それ再現可能な結果を作成する
しかし、糸が生産準備が整っているかどうかは依然として疑問です。 GitHubリポジトリにはまだまだ沢山の目障りなバグが残っているので、1ヵ月ほど待つことにします。
シュリンクラップがロッシーであることを意味していますか? –
これは、 'npm shrinkwrap'>' npm install'> 'npm shrinkwrap'を実行すると、最初の時刻が – nikjohn
のnpm-shrinkwrapファイルと異なることを意味します。 NPM shrinkwrap docs "npm installを引数なしで実行すると、単に既存のシュリンクラップが再現されます。" (ref:https://docs.npmjs.com/cli/shrinkwrap) –
私は、npm-shrinkwrapの目的は依存関係をロックすることだと考えました。どうやってnpm-shrinkwrapが損失を起こすのか説明できますか? – styfle
[shrinkwrap docs](https://docs.npmjs.com/cli/shrinkwrap)は、損失のないように発音します: "各依存関係の各バージョンを再帰的に指定して、後続のビルドとデプロイでは誤ってセーバーパターン " – styfle
を満たす新しいバージョンの依存関係を取得しないでください。パッケージバージョンのセットをペグするためにロックボックスを追加するよりも簡単な機能を考えようとしていますが、何も思い付きませんでした。つまり、範囲の文字を取り除いて、バージョンを正確な数に固定するだけで、package.jsonをフィルタリングすることができます。私は彼を「もつれ」と呼ぶだろう。 cat package.json | tangle> package.pinned.json –