npm 12

501文字
3分
編集

npm の次期メジャー v12 では、npm install のセキュリティ関連デフォルトが opt-in 化される。公開は 7 月頃の見込みで、変更は npm 11.16.0 以降で警告として確認できる。

各変更は、現在自動で走る挙動を明示的な許可に切り替える。

#Git 依存の解決(--allow-git

--allow-git の既定が none になる。直接・推移的な Git 依存は、--allow-git で許可しない限り解決されない。Git 依存の .npmrc が Git 実行ファイルを上書きし、--ignore-scripts でもコード実行に至る経路を塞ぐ変更で、2026 年 2 月の告知以降 npm 11.10.0 以降で試せる。

#リモート URL 依存(--allow-remote

--allow-remote の既定が none になる。https tarball などリモート URL 由来の依存(直接・推移的)は、明示許可がない限り解決されない。フラグは npm 11.15.0 以降で利用可能。--allow-file--allow-directory の既定は v12 では変わらない。

#install スクリプト(allowScripts

allowScripts の既定が off になる。依存の preinstall / install / postinstall は、プロジェクトで明示許可しない限り実行されない。binding.gyp を持つネイティブビルドも、暗黙の node-gyp rebuild ごとブロックされる。git / file / link 依存の prepare も同様。

ブロック対象の確認と許可は npm approve-scripts / npm deny-scripts で行い、結果の allowlist は package.json に書き込まれコミット対象とする。

sh
# 未レビューの install スクリプトを一覧(package.json は変更しない)
npm approve-scripts --allow-scripts-pending

# 信頼するパッケージを許可
npm approve-scripts <pkg> [<pkg> ...]

# 残りを拒否
npm deny-scripts <pkg> [<pkg> ...]

#移行前の準備

npm 11.16.0 以降へ上げ、通常の install を走らせて警告を確認する。npm approve-scripts --allow-scripts-pending でスクリプトを持つパッケージを洗い出し、信頼分だけ approve して package.json をコミットする。v12 移行後も approve 済みのスクリプトだけが実行され、未承認分は停止する。npx や global install 向けの設定は allow-scripts config を参照する。

#参考文献