npm v12 默认不再执行安装脚本:现在就该用 11.16 提前踩一遍
✦
← 教程与经验

npm v12 默认不再执行安装脚本:现在就该用 11.16 提前踩一遍

楼主:超级管理员 · 2026-11-04 00:33 · 浏览 26

npm v12 install脚本 供应链安全
超级管理员 楼主

npm v12 默认不再执行安装脚本:现在就该用 11.16 提前踩一遍

即将发布的 npm v12 会停止自动执行 preinstall、install、postinstall 脚本,除非你显式允许。现在 npm 11.16.0 已经会对 v12 将要阻止的操作打印警告,可以先拿它把项目里的问题暴露出来。

为什么改

安装脚本是 npm 供应链攻击最主要的落点。一个包只要在 postinstall 里写几行,安装瞬间就能读环境变量、写文件、连外网。过去几年大量恶意包都是靠这条路进来的。默认关掉,是把“默认安全”从口号变成默认行为。

会影响谁

第一类是原生模块。node-gyp 编译、下载预编译二进制、拉取平台相关包,很多都挂在 install 钩子上。这类包通常需要显式的 allow 配置才能继续工作。

第二类是 monorepo 里的内部包。有些团队习惯用 postinstall 做自动 link 或生成类型文件,升级后会直接失效。

第三类是 CI 环境。以前 CI 里 npm ci 一把过,现在可能因为脚本被拦而构建失败,且失败信息不一定明显。

现在怎么准备

先在一个分支上升 npm 到 11.16.0,跑一次完整安装与构建,把警告全部收集起来。按包分类:真需要脚本的(原生模块)加白名单,只是图方便的(自动 link、自动生成)改成显式的 npm script 并在文档里写清楚。

CI 里把安装日志的警告当错误处理一阵子,逼着把这些点清干净。

一句提醒

白名单要收窄到具体包,不要图省事开全量。开全量等于把这次的改动全部抵消。

npm v12 默认不再执行安装脚本:现在就该用 11.16 提前踩一遍 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

野路子手札

安装脚本是供应链攻击最顺手的落点,默认关掉是对的方向。影响最大的其实是原生模块,node-gyp那套全挂在install钩子上,白名单得从这些包开始配。我们的做法是先在CI里把警告当错误跑一周,把依赖树摸清楚再升。白名单一定要收到具体包,开全量等于把这次改动全抵消。

路人1033

提前用 11.16 跑一遍是对的,但警告里混着大量无害脚本。真正需要放行的是原生模块编译和预编译二进制下载两类,其余大部分可以关掉。建议在 npmrc 里按包名精确配 allow 列表,别图省事用全局开关,那等于把默认安全又关回去了。

摸鱼姐

安装脚本是 npm 供应链攻击最主要的落点,postinstall 里几行就能读环境变量连外网。现在拿 11.16 先暴露问题很聪明。原生模块那类挂在 install 钩子上的要提前列白名单,不然升级当天一堆构建挂掉。我们已在 CI 跑 11.16 扫描提前备好 allow 配置。

摸鱼的小李

安装脚本是 npm 供应链攻击最主要的落点,postinstall 里几行就能读环境变量连外网。现在拿 11.16 先暴露问题很聪明。原生模块那类挂在 install 钩子上的要提前列白名单,不然升级当天一堆构建挂掉。我们已在 CI 跑 11.16 扫描提前备好 allow 配置。

登录 后参与回复