Performant NPMの略で主な特徴は
- キャッシュとリンク方式で npm / yarn より高速
- 同じ依存は 1 回だけ保存 → ディスク節約
- 隠れた依存を許さない → バグを防ぎやすい
特徴 | npm | yarn | pnpm |
---|---|---|---|
速度 | 標準的 | npm より速い | 最速クラス |
ディスク使用 | 多い(各プロジェクトごとに保存) | npm と同等 | 少ない(依存は一度だけ保存しリンク) |
依存解決の厳密さ | 緩い(偶然動くケースあり) | 少し改善 | 厳密(隠れた依存を許さない) |
モノレポ対応 | 限定的 | Workspaces あり | Workspaces が強力でシンプル |
セキュリティ | 基本機能のみ | 同等 | ライフサイクルスクリプト無効化や minimumReleaseAge で強化 |
普及度 | 最も広い | 2番手 | 急速に拡大中 |
2025 9月「npm サプライチェーン攻撃」
感染したパッケージがインストールされると、スクリプトが自動的に実行され、開発環境内に保存されている認証情報がスキャンされます。
そこからその開発者が持つあらゆる権限(リポジトリ、クラウド、公開パッケージ等)へ横展開されます。
pnpm で対策
pnpmのオプション minimumReleaseAge
公開から指定時間(分)が経過したパッケージのみをインストール可能。
Lifecycle Scriptsの無効化
Lifecycle Scripts(ライフサイクルスクリプト)」とは、npm / pnpm などのパッケージマネージャが「依存関係をインストールする過程」で自動的に呼び出すスクリプトです
pnpm 10.0.0 から、ライフサイクルスクリプトは、デフォルトでは実行されない
悪意あるスクリプトの実行も一定数は防ぐことが可能です
pnpm導入
npm でインストール
npm -v
10.9.0
npm install -g pnpm
added 1 package in 9s
pnpm -v
10.17.1
npmから移行
rm -rf node_modules
package.jsonを編集
{
"scripts": {
"preinstall": "npx only-allow pnpm",
pnpm install