npm 対 yarn 対 pnpm

02/02/2019

読む際の注意

  • npm の package の install と実行方法知ってくらいの知識
  • yarn ・ pnpm は調べる前は存在自体知らなかった
  • npm を使用して、何かを作成したことはない
  • 調査方法として、記事を読むだけで、実際に触ってはいません
  • npm との互換性について書いておりません
  • 詳しいことまでは書いてないので、詳細内容を知りたい人は公式ドキュメントを見て下さい。
  • プロジェクトでもう決まっているなら、基本的にそれを使いましょう
  • 所々に登場する用語についての説明はないですが、説明している記事へのリンクはってるので、そちらを読んで下さい。
  • 参考した英語のサイトは google 翻訳使って読みました。

調査結果

  • npm と yarn の移行は簡単なので、初心者は情報が多い、 npm を最初使用して、不満が出たら yarn を使えばいいと思う
  • yarn を使い続けている理由として、npm にしかできないことがない、yarn の標準搭載されている機能が多く感じた。
  • pnpm は node_modules の構造が他と違い、扱えない package とかがでてくるので、玄人向け。素人が触るには厳しい感じがする。
過去にダウンロードした package を install するときの処理node_module sの構造monorepo 対応特徴
npmNPMレジストリから新しくダウンロードnpm v3から平坦化未対応
Lerna を使えば可能
情報が沢山で、良い悪い関わらず、どんな package でも扱うことができる
yarnオフラインミラーを使えば、ダウンロードをスキップできるnpm と同じ平坦化workspace
対応
npm にはない便利な機能が標準搭載されている
pnpmpackage cache のフォルダへのハードリンクが作成されるnpm v2 と同じ構造対応ディスク使用量が npm と yarn より大幅に少なくなる。

表の項目で参考にした資料

install 速度

yarn を利用する理由になっていた、速度が遅い問題は、 npm が package-lock.json を利用することにより、差は縮まり、npm が少し遅いくらいになり、決め手ではなくなった。

速度比較が書いてある記事

補足

npm

  • 「悪い package」を扱うことに対しても最も寛容
  • npm-check を使用すれば、yarn upgrade-interactive みたいな対話型アップグレードが可能

yarn

  • npm に標準搭載されてない便利な機能とは、オフラインミラーworkspace対話型アップグレード・package の並行インストールなどがある
  • npm cli の command と違い、 yarn の cli command の方がわかりやすいと感じた。比較している記事
  • facebook の npm レジストリミラーを使用しているため、 package 使用状況が facebook に送信される
  • yarn は default のレジストリではなく、異なるレジストリを使用しているが説明がない
  • yarn は version ごとに yarn.lock の形式が変更するから合わせないといけない。
  • yarn のバージョン変更を簡単にできる、 yvm というツールがある。

pnpm

  • NodeJSモジュール解決標準に正しく従っている
  • Phantom dependenciesNPM doppelgangers 問題を解決できる。(問題名を検索しても全然ヒットしなかったので、参考サイトが独自に付けた名前な感じがする)
  • package.jsonファイルに依存関係を列挙するのを忘れてたり、標準に従ってシンボリックリンクを処理せずに自作モジュールの解決を実装している 「悪い package」を使用するのには package の修正が必要
  • ディスク使用量を比較している記事

調べてる時目についたものやコメント

  • npm-check 調べているときに、 npm-check-updates というものを発見した。違いについては調べてない。
  • npm-check を npm の標準搭載しろ
  • npm はラムダ関数がいっぱいあって、デバックが非常に困難で修正するのが難しいから、 facebook は npm と協力せず、 yarn を一から作成した。
  • iedという pnpm と同じく、シンボリックリンクを使うものを発見した。 pnpm と違うのは、 node_modules の構成が npm v3以降と同じ平坦化されている点。github の最終 commit が3年前だから、開発が止まっているみたいなので、表に入れなかった

このエントリーをはてなブックマークに追加