即将发布的 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 里把安装日志的警告当错误处理一阵子,逼着把这些点清干净。
一句提醒
白名单要收窄到具体包,不要图省事开全量。开全量等于把这次的改动全部抵消。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。