NPM v12 即将到来的破坏性变更
摘要
npm v12 对 npm install 引入了安全相关的破坏性变更,默认禁用脚本、git 依赖和远程 URL 依赖的自动执行。用户可以通过升级到 npm 11.16.0+ 并查看警告信息来提前准备,显式选择信任行为。
暂无内容
查看缓存全文
缓存时间: 2026/06/10 00:21
# npm v12 即将发布的重大变更
来源:https://github.blog/changelog/2026-06-09-upcoming-breaking-changes-for-npm-v12/
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、file 和 link 依赖项的 `prepare` 脚本同样会被阻止。要查看哪些内容会被阻止,请运行 `npm approve-scripts --allow-scripts-pending`。然后,使用 `npm approve-scripts` 允许您信任的包,并使用 `npm deny-scripts` 阻止其余包。生成的允许列表将写入 `package.json` 并应提交。如果您的安装流程运行脚本,您可以在 npm 11.16.0+ 中看到相关警告。
- **`--allow-git` 默认值为 `none`:** `npm install` 将不再解析 Git 依赖项(直接的或间接的),除非通过 `--allow-git` 明确允许。这关闭了一个代码执行路径,其中 Git 依赖项的 `.npmrc` 可以覆盖 Git 可执行文件,即使使用了 `--ignore-scripts` 也是如此。此项变更此前已于 2026-02-18 公布(https://github.blog/changelog/2026-02-18-npm-bulk-trusted-publishing-config-and-script-security-now-generally-available/),并已在 npm 11.10.0+ 中可用。
- **`--allow-remote` 默认值为 `none`:** `npm install` 将不再解析来自远程 URL 的依赖项,例如 https tarball(直接的或间接的),除非通过 `--allow-remote` 明确允许。此标志在 npm 11.15.0+ 中可用。相关的 `--allow-file` 和 `--allow-directory` 标志的默认值在 v12 中不会改变。
### 如何准备 (https://github.blog/changelog/2026-06-09-upcoming-breaking-changes-for-npm-v12/#how-to-prepare)
升级到 npm 11.16.0 或更高版本,运行您正常的安装流程,并查看警告。使用 `npm approve-scripts --allow-scripts-pending` 查看哪些包有脚本,允许您信任的脚本,并提交更新后的 `package.json`。之后,只有您批准的脚本会在升级后继续运行。任何您未批准的脚本都将停止运行。更多详细信息,请参阅我们的文档:`npm approve-scripts` (https://docs.npmjs.com/cli/v11/commands/npm-approve-scripts)、`npm deny-scripts` (https://docs.npmjs.com/cli/v11/commands/npm-deny-scripts) 以及 `allow-scripts` 配置 (https://docs.npmjs.com/cli/v11/using-npm/config#allow-scripts)(适用于 `npx` 和全局安装)。请在我们的社区讨论 (https://github.com/orgs/community/discussions/198547) 中分享您的评论和问题。
相似文章
Show HN: Safe-install – 通过可信构建依赖实现更安全的 NPM 安装
介绍了一个名为 safe-install 的新 npm 包,旨在通过允许开发者默认禁用安装脚本并屏蔽异类子依赖来增强供应链安全,从而应对持续存在的安全漏洞。
npm 的分阶段发布和新的安装时控制
npm 引入了分阶段发布,要求通过双因素认证(2FA)进行人工审批才能发布包,并新增了 `--allow-*` 标志(file、remote、directory)来控制安装源,从而提高了 npm CLI 11.15.0 的供应链安全性。
@RhysSullivan: 刚刚在我机器上启用了 npm 包安装的最小年龄限制,早就该这么做了,如果你还没做的话……
一位开发者分享了一个技巧,为包安装配置最小发布年龄以缓解供应链攻击。
@DeRonin_: 使用本指南保护你的计算机免受 NPM 攻击,这些攻击会在一次安装中窃取一切。TanStack,一个代码库使用……
本文详细介绍了针对 NPM 上 TanStack 库的供应链攻击,并提供了一份全面的指南,通过锁定依赖项发布年龄、固定版本以及对 CI/CD 流水线和 IDE 扩展进行审计,来保护开发环境的安全。
人人都该从 npmx 偷学的功能
npmx 是一个 MIT 授权的 npm 仓库替代前端,它在安全与可用性上做了增强:展示传递式安装体积、暴露安装脚本、可视化过期/含漏洞依赖树,还逼得 npmjs.com 终于上线了深色模式。