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 ファイルも扱える
- npm にあった問題を解決するために作られた
-
yarn v2,v3~(berry)
- node_modules にパッケージをインストールしない Zero installs や、PnP を利用できるようになったバージョン
- デフォルトは PnP
- PnP 嫌いな人がそこそこいるので不人気
- yarn 的には Zero installs が理想
- git clone 後にインストールしなくて良い
- 従来のように node_modules にインストールすることも出来るが設定が必要で面倒なので v1 が使われがち
- デフォルトは PnP
- v2 時点では、ツールやライブラリが PnP をサポートしておらず、うまく動かないパッケージがたくさんあったが最近は落ちついている(が稀にあるので、あまり気軽に採用できない)
- Yarn v2 自身だけでなく Babel や Jest が採用している
- ただし Yarn v2 自身以外は、node_modules モード
- PnP によるインストールの効率化
- node_modules に展開せず、再圧縮して yarn/cache へフラットに並べる
- .yarn/cache を git にコミットするのが Zero-installs
- フラットに並べることでパッケージの重複、再展開を防ぎ、圧縮によって容量も軽減できる。
- node_modules に展開せず、再圧縮して yarn/cache へフラットに並べる
- node_modules にパッケージをインストールしない Zero installs や、PnP を利用できるようになったバージョン
-
pnpm
- performant npm の略
- シンボリックリンクとハードリンクを駆使している
- インストールが高速、1〜2 倍
- ディスク容量の軽減
- パッケージの実態は、グローバルに管理される
- node_moduls の中身はシンボリックリンクであるため、node_modules 内に実態のあるファイルがあることを前提にしているパッケージ類は動かない。
- 割とあった
- 有名どころは対応済み
- nodenv 的な機能が内蔵されていたりする
Q. npm, pnpm, yarn, npxの違いを一ミリも理解していない
https://blog.ohirunewani.com/posts/npm-pnpm-yarn-npx/