pnpm をインストールする

● pnpm の特徴

  • ハードリンクを使うので使用するディスク容量が圧倒的に少なくなる
  • node.js のバージョン管理もできる(volta , nodenv 不要です)
  • npmパッケージインストールが速い(ただし最速を求めるなら bun の方が圧倒的に速いです)
  • セキュリティに配慮したオプションがある
・--ignore-scripts(デフォルトでオン になっています)
・minimumReleaseAge

● pnpm をインストールする

npmを使う

npm install -g pnpm

brewを使う(めっちゃ遅いです)

brew install pnpm

● pnpm のバージョンを確認する

pnpm -v
10.15.0

コマンド名を p にしておく

.bash_profile や .zshrc

alias p='pnpm '

とすると

p i 

pnpm install できます!

● pnpmの設定を確認する

# 1. デフォルト場所の確認
ls -la ~/.local/share/pnpm/store

# 2. pnpmのバージョン確認
pnpm --version

# 3. 実際のストア場所を確認
pnpm store path

# 4. すべての設定を確認
pnpm config list

● pnpm , npm でローカルパッケージの扱いの違い

pnpm , npm でローカルパッケージのリンク構造の違いがおきます

例えば ../../にローカルパッケージ *my-local-package** がある場合

メインのアプリの node_modules では以下のようなリンクとなります

npm の場合 : my-local-package -> ../../my-local-package
pnpmの場合 : my-local-package -> .pnpm/my-local-package@file+..+my-local-package_...

pnpmでローカルパッケージにエラーが出る場合は

https://www.reddit.com/r/node/comments/1db000r/unable_to_install_local_package_in_pnpm_workspace/?tl=ja

.npmrc

link-workspace-packages = true
prefer-workspace-packages = true
recursive-install = true

各設定の効果

link-workspace-packages = true ワークスペース内に存在するパッケージがあれば、レジストリからダウンロードせずにローカルのものをnode_modulesにリンクします。

prefer-workspace-packages = true レジストリ上に同名パッケージがあっても、ワークスペースローカルのものを優先的に使います。

recursive-install = true ワークスペース配下の全てのパッケージの依存を再帰的にインストールします。pnpm install実行時、全体的に依存追加・更新が反映されます。

● プロジェクトを pnpm で強制させる設定

{
  "scripts": {
    "preinstall": "node -e \"if (!/pnpm/.test(process.env.npm_execpath)) { console.error('❌ Please use pnpm, not npm or yarn'); process.exit(1); }\""
  },
  "engines": {
    "pnpm": ">=10"
  }
}

● npm ci 相当のコマンド

npm ci に相当する pnpm のコマンドは pnpm install --frozen-lockfile です。

pnpm install --frozen-lockfile
No.2644
12/15 13:11

edit