・--ignore-scripts(デフォルトでオン になっています)
・minimumReleaseAge
npmを使う
npm install -g pnpm
volta を使っている場合はこちら
volta install pnpm
// バージョン指定、例えばバージョン12をインストールする場合はこちら
volta install pnpm@12
brewを使う(めっちゃ遅いです)
brew install pnpm
pnpm -v
11.0.7
コマンド名を p にしておく
.bash_profile や .zshrc
alias p='pnpm '
とすると
p i
で pnpm install できます!
# 1. デフォルト場所の確認
ls -la ~/.local/share/pnpm/store
# 2. pnpmのバージョン確認
pnpm --version
# 3. 実際のストア場所を確認
pnpm store path
# 4. すべての設定を確認
pnpm config list
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でローカルパッケージにエラーが出る場合は
.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実行時、全体的に依存追加・更新が反映されます。
"engines": {
"node": ">=24",
"pnpm": ">=11",
"npm": "please-use-pnpm. このプロジェクトでは pnpm を使用してください"
}
実行例( npmコマンドでインストールを実行しようとすると以下のエラーが出ます)
npm install xxxxx
npm error code EBADENGINE
npm error engine Unsupported engine
npm error engine Not compatible with your version of node/npm: p_test@1.0.0
npm error notsup Not compatible with your version of node/npm: p_test@1.0.0
npm error notsup Required: {"node":">=24","pnpm":">=11","npm":"please-use-pnpm. このプロジェクトでは pnpm を使用してください"}
npm error notsup Actual: {"npm":"10.8.1","node":"v24.14.1"}
npm ci に相当する pnpm のコマンドは pnpm version 11 から 同じ pnpm ci というコマンドが追加されましたのでこれを使いましょう
pnpm ci
volta , mise , Proto などを使ってない場合に以下のようにして バージョンを自動的に設定することができます (pnpmによる独自拡張)
"devEngines": {
"packageManager": {
"name": "pnpm",
"version": "^12", // 範囲指定OK 。ただし Corepack を使っている場合はエラーになることがあるのでその時は 12.0.0 などと指定する
"onFail": "download"
}
}
pnpmを使うプロジェクトで、誤ってnpm installを実行してしまうとnode_modulesが壊れることがあります。lifecycle script(preinstallなど)に頼らず、.npmrcの設定だけで防げます。
## やること
package.jsonに非semver文字列のengines.npmを書く。
`json
{
"engines": {
"npm": "このプロジェクトでは pnpm を使用しています",
"pnpm": "11"
}
}
`
.npmrcに1行追加する。
`ini
engine-strict=true
`
## 仕組み
enginesフィールドをチェックする際、値が正しいsemver範囲でなければ不一致として扱うengine-strict=trueがあると、不一致時にnpmは即座にエラー終了する.npmrcのauth/registry以外の設定を読まないため、engine-strictの影響を受けない## 結果
$ npm i
npm error code EBADENGINE
npm error engine Unsupported engine
npm error notsup Required: {"npm":"このプロジェクトでは pnpm を使用しています","pnpm":"11"}
npm error notsup Actual: {"node":"v26.5.1","npm":"11.17.0"}
$ pnpm i
Done in 5.2s using pnpm v11.17.0
npmだけがブロックされ、pnpmは通常どおり動く。