JSのお気に入りのパッケージマネージャーを教えてください。糸とnpmに関する記事を見ました。しかし、私にとって何が良いのかはわかりません。 JSを学び始めたところです。
現在、糸とnpmの違いはコーラのブランドの違いのようなものです。
npm
しかなかったのに、依存関係の解決とキャッシングに多くの問題があり、別のツールが生まれた(yarn
)こともありました。通常、依存関係を解決するためにローカルキャッシュを使用していました。たとえば、ほぼ常に同じ環境で実行されるCIジョブを実行している場合、クラウドサービスのデータの支払いには高帯域幅がかかります。つまり、古いnpm
バージョンでは、npm install
を実行し、depsでletを実行していました。
yarn
はnpm
パッケージと 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.lock
とyarn
が最終的にインストール時のパッケージの状態を「模倣」します。コミットされたyarn.lock
は、NPM
がsemverの満足度に注目し、2人の開発者向けに2つの異なるバージョンを取得できます(パッケージが時間内にアップグレードされると仮定)
npm
の人々がnpm@5
をリリースしたので、多くの作業があり、すべてのステートメントは、なぜyarn
が作成された理由であり、その時点でどの問題が解決していたと思いますが、現在の日付では、大きな違いはないと思います最近のそれら2