C
发布于 2026/09/03 · 阅读 3

npm v12 即将到来的破坏性变更

  • #npm
  • #安全更新
  • #破坏性变更
  • #Hacker News
  • #github.blog
npm v12 即将到来的破坏性变更

我们的下一个 npm 主版本 v12 引入了一些与安全相关的默认变更,影响 npm install。所有这些变更目前在 npm 11.16.0 或更高版本中可以通过警告看到,因此你可以在升级前做好准备。v12 预计在 2026 年 7 月发布。

每个变更都将当前自动运行的 npm install 行为转变为需要你显式选择加入的行为:

  • allowScripts 默认关闭npm install 将不再执行依赖中的 preinstallinstallpostinstall 脚本,除非在项目中显式允许。这包括原生的 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 中不会改变默认值。

如何准备

  1. 升级到 npm 11.16.0 或更高版本。
  2. 运行你的正常安装流程,并检查警告。
  3. 使用 npm approve-scripts --allow-scripts-pending 查看哪些包包含脚本。
  4. 允许你信任的包,并提交更新后的 package.json

之后,只有你批准的脚本在升级后会继续运行。任何未批准的脚本都会停止运行。

更多详情请查阅我们的文档:npm approve-scriptsnpm deny-scriptsallow-scripts 配置(适用于 npx 和全局安装)。

请在社区讨论中分享你的评论和问题。

3 阅读0 评论0 点赞

评论

登录 / 注册即可发布评论!
暂无评论,成为第一个发表评论的用户吧。