648 文字
3 分

Q. npm, pnpm, yarn, npxの違いを一ミリも理解していない

npm と npx の違い#

  • npm : node package manager
    • yarn
    • pnpm
  • npx : node package executer
    • yarn dlx
    • pnpm dlx
      • npx と打った方がはやいので npx が使われがち

npx の歴史#

  • npm v5: npx が同梱されるようになった
    • 独立したパッケージであった
    • ローカルにインストールされているパッケージを実行できた
  • npm v7: npm exec のエイリアスに変更
    • ローカルにないパッケージを実行しようとした場合、インストールを促すようになった

npm、yarn、pnpm の比較#

コマンド:ほぼ同じか、代替方法があるのでなんとなくで問題ない

インストール速度:npm ≤ yarn v1 << yarn v2 (berry) < pnpm ≤ yarn v3 (berry)

インストール方法:

  • npm と yarn v1 はほぼ同じ

  • yarn v2~と pnpm は早いが、エッジケースがある

  • npm

    • 公式
  • yarn v1

    • npm にあった問題を解決するために作られた
      • インストールの再現性
      • インストール速度
      • セキュリティ
    • npm にない独自機能が追加されていた
      • Monorepo サポート
      • ライセンスの確認
      • インタラクティブアップデート
    • 現在は、yarn の多くの機能が npm に取り込まれ、最新の npm ではほぼ差はない
      • yarn で生成された lock ファイルも扱える
  • yarn v2,v3~(berry)

    • node_modules にパッケージをインストールしない Zero installs や、PnP を利用できるようになったバージョン
      • デフォルトは PnP
        • PnP 嫌いな人がそこそこいるので不人気
      • yarn 的には Zero installs が理想
        • git clone 後にインストールしなくて良い
      • 従来のように node_modules にインストールすることも出来るが設定が必要で面倒なので v1 が使われがち
    • v2 時点では、ツールやライブラリが PnP をサポートしておらず、うまく動かないパッケージがたくさんあったが最近は落ちついている(が稀にあるので、あまり気軽に採用できない)
    • Yarn v2 自身だけでなく Babel や Jest が採用している
      • ただし Yarn v2 自身以外は、node_modules モード
    • PnP によるインストールの効率化
      • node_modules に展開せず、再圧縮して yarn/cache へフラットに並べる
        • .yarn/cache を git にコミットするのが Zero-installs
        • フラットに並べることでパッケージの重複、再展開を防ぎ、圧縮によって容量も軽減できる。
  • pnpm

    • performant npm の略
    • シンボリックリンクとハードリンクを駆使している
      • インストールが高速、1〜2 倍
      • ディスク容量の軽減
      • パッケージの実態は、グローバルに管理される
      • node_moduls の中身はシンボリックリンクであるため、node_modules 内に実態のあるファイルがあることを前提にしているパッケージ類は動かない。
        • 割とあった
        • 有名どころは対応済み
    • nodenv 的な機能が内蔵されていたりする
Q. npm, pnpm, yarn, npxの違いを一ミリも理解していない
https://blog.ohirunewani.com/posts/npm-pnpm-yarn-npx/
作者
hrdtbs
公開日
2023-04-22
ライセンス
CC BY-NC-SA 4.0