npm v12 即将到来的破坏性变更
- #npm
- #安全更新
- #破坏性变更
- #Hacker News
- #github.blog
我们的下一个 npm 主版本 v12 引入了一些与安全相关的默认变更,影响 npm install。所有这些变更目前在 npm 11.16.0 或更高版本中可以通过警告看到,因此你可以在升级前做好准备。v12 预计在 2026 年 7 月发布。
每个变更都将当前自动运行的 npm install 行为转变为需要你显式选择加入的行为:
-
allowScripts默认关闭:npm install将不再执行依赖中的preinstall、install或postinstall脚本,除非在项目中显式允许。这包括原生的 node-gyp 构建(例如,包含binding.gyp但没有显式安装脚本的包同样会被阻止,因为 npm 会为其运行隐式的node-gyp rebuild)。来自 Git、文件和链接依赖的prepare脚本也会以相同方式被阻止。 要查看哪些内容会被阻止,请运行npm approve-scripts --allow-scripts-pending。然后使用npm approve-scripts允许你信任的包,使用npm deny-scripts阻止其余包。生成的允许列表会写入package.json并应提交到版本控制。如果你的安装流程中运行了脚本,可以在 npm 11.16.0+ 中看到警告。 -
--allow-git默认无:npm install将不再解析 Git 依赖(直接或传递),除非通过--allow-git显式允许。这关闭了一条代码执行路径:Git 依赖的.npmrc文件可能覆盖 Git 可执行文件,即使设置了--ignore-scripts。此变更此前已于 2026-02-18 宣布,并在 npm 11.10.0+ 中可用。 -
--allow-remote默认无:npm install将不再解析来自远程 URL 的依赖(例如 https tarball,直接或传递),除非通过--allow-remote显式允许。此标志在 npm 11.15.0+ 中可用。
相关的 --allow-file 和 --allow-directory 标志在 v12 中不会改变默认值。
如何准备
- 升级到 npm 11.16.0 或更高版本。
- 运行你的正常安装流程,并检查警告。
- 使用
npm approve-scripts --allow-scripts-pending查看哪些包包含脚本。 - 允许你信任的包,并提交更新后的
package.json。
之后,只有你批准的脚本在升级后会继续运行。任何未批准的脚本都会停止运行。
更多详情请查阅我们的文档:npm approve-scripts、npm deny-scripts 和 allow-scripts 配置(适用于 npx 和全局安装)。
请在社区讨论中分享你的评论和问题。
评论