web-dev-qa-db-ja.com

yarnとnpmの主な違いは何ですか?

JSのお気に入りのパッケージマネージャーを教えてください。糸とnpmに関する記事を見ました。しかし、私にとって何が良いのかはわかりません。 JSを学び始めたところです。

現在、糸とnpmの違いはコーラのブランドの違いのようなものです。

23
user9772177

npmしかなかったのに、依存関係の解決とキャッシングに多くの問題があり、別のツールが生まれた(yarn)こともありました。通常、依存関係を解決するためにローカルキャッシュを使用していました。たとえば、ほぼ常に同じ環境で実行されるCIジョブを実行している場合、クラウドサービスのデータの支払いには高帯域幅がかかります。つまり、古いnpmバージョンでは、npm installを実行し、depsでletを実行していました。

最初のメモ

yarnnpmパッケージと https://www.npmjs.com/ の上に構築されていることを理解してください。つまり、両方ともパッケージを解決するためにNPMレジストリを使用しています。したがって、npm install [email protected].またはyarn add [email protected].を実行すると、まったく同じ結果が得られます

増分インストール

[email protected]

すべての新しいビルドで、両方の依存関係がインターネットから再びダウンロードされました。 Yarnは下でyarn.lockを使用し、package.jsonファイルとyarn.lockを比較し、新しい依存関係を増分インストールするためだけに追加で取得する必要があるパッケージを決定します

マルチスレッド

yarnは、スレッドに依存しないパッケージの並列インストールを提供します。 npm installからインストール時間を1/10に短縮できます

バージョンロック

前に述べたように、yarnは、インストール後すべてのバージョンを保持する各インストール後にyarn.lockを生成します(おそらくパッケージは依存関係を持つことができ、依存関係も独自の依存関係を持つことができるため)、非常につながる依存関係の無限ツリーを構築できます悪い競合。このシナリオを想像してみましょう

 - lodash^1
 - [email protected]
 - - [email protected]
 - [email protected]
 - - [email protected]

another_moduleのメンテナーが変更点のバージョン1.2.0に変更を加えることを決定したときのシナリオを想像してください。昔はnpmが同じライブラリの2つの異なるインスタンスと、非常に奇妙な動作につながる2つの異なるバージョンを取得する可能性があります。モジュールに完全なロックがないため(semverバージョン^ 1.xxおよび^ 2.xxを受け入れるため、両方のサブモジュールが要件を満たしているが、異なるバージョンをフェッチします。ヤーンはyarn.lock ATプロジェクトに新しいパッケージを追加するとき、つまり、プロジェクトの他の開発者がプロ​​ジェクトをチェックアウトすると、同じyarn.lockyarnが最終的にインストール時のパッケージの状態を「模倣」します。コミットされたyarn.lockは、NPMがsemverの満足度に注目し、2人の開発者向けに2つの異なるバージョンを取得できます(パッケージが時間内にアップグレードされると仮定)

最後のメモ

npmの人々がnpm@5をリ​​リースしたので、多くの作業があり、すべてのステートメントは、なぜyarnが作成された理由であり、その時点でどの問題が解決していたと思いますが、現在の日付では、大きな違いはないと思います最近のそれら2

31
Milos Mosovsky