npmとyarnとpnpmどれが一番早い?
https://4.bp.blogspot.com/-9nAPirOIyc8/Vq88uH4ErvI/AAAAAAAA3ek/tREBpFR6RLE/s800/nezumi_marathon.png
Node.js 向けには npm、yarn、pnpm と複数のパッケージマネージャーがあるけど実際どれが一番早いの?という検証。プロジェクト規模やパッケージ数にもよるのであくまで参考値まで。 まとめ
yarn@berry または pnpm > npm >>> yarn@classic の順番で早い
早いパッケージマネージャーを使用したい場合は yarn@berry もしくは pnpm を使用すると良い
番外として用意した bun によるパッケージインストール時間は 約5秒で他を抜いて圧倒的だった
検証環境
以下の環境で検証した
Memory: 64GB
OS: macOS Ventura 13.4.1(c) パッケージ数: 約 350 パッケージ
備考:
対象のパッケージマネージャーは検証時に取得できる最新版を corepack から有効にして使用した。 今回の検証からは yarn@berry に搭載されるプラグアンドプレイ機構は対象外とする。
参考比較として bun の node_modules の構築機能も対象とした。 ただし corepack のサポート外なので比較としては参考値とする。
検証手法
corepack 経由で npm、yarn、pnpm をそれぞれ取得しておく
code:sh
corepack prepare npm@latest
corepack prepare yarn@1
corepack prepare yarn@3
corepack prepare pnpm@latest
パターンごとにでキャッシュを削除した状態とキャッシュがある状態で node_modules を再構築した
yarn@berry は他のパッケージマネージャーと条件を合わせるために nodeLinker: node-modules を指定した
結果
計測結果では yarn@berry > pnpm > npm >>> yarn@classic というような結果になった (※ 2023-08-22 時点)
yarn@classic は v1 で他のパッケージマネージャーと異なり機能追加がされていないのでこれまた参考まで。
今回は pnpm に比較して yarn@berry のほうが早い結果になったが依存パッケージの種類やサイズによっても変わってくると思われるのでこの2つの速度差の1.5〜2秒はほぼ誤差と考えて良さそう
code:md
PackageManager | Version | Time (without cache) | Time (with cache)
---------------|---------|---------------------:|-----------------:
npm | 9.8.1 | 52.83 s | 18.75 s
yarn@classic | 1.22.19 | 93.55 s | 33.23 s
yarn@berry | 3.6.2 | 28.65 s | 12.29 s
pnpm | 8.6.12 | 30.64 s | 19.30 s
bun | 0.7.3 | 5.79 s | 1.58 s