npm 的分阶段发布和新的安装时控制
摘要
npm 引入了分阶段发布,要求通过双因素认证(2FA)进行人工审批才能发布包,并新增了 `--allow-*` 标志(file、remote、directory)来控制安装源,从而提高了 npm CLI 11.15.0 的供应链安全性。
暂无内容
查看缓存全文
缓存时间: 2026/05/23 06:29
# 分步发布和 npm 新的安装时控制功能
来源:https://github.blog/changelog/2026-05-22-staged-publishing-and-new-install-time-controls-for-npm/
今天我们发布了 npm 的两项更新,专注于供应链安全:
1. **分步发布(Staged publishing)** 现已正式可用。
2. 新增 `--allow-*` 安装源标志(`--allow-file`、`--allow-remote`、`--allow-directory`),补充现有的 `--allow-git` 标志。
这两项功能在 **npm CLI 11.15.0 或更高版本** 中可用。
---
## 分步发布正式可用(https://github.blog/changelog/2026-05-22-staged-publishing-and-new-install-time-controls-for-npm/#staged-publishing-is-generally-available)
分步发布现已正式在 npm 上可用。与直接发布(立即让消费者可用某个包版本)不同,预构建的 tarball 会上传到一个分步队列,维护者必须显式批准后,该版本才变为可安装。该队列在 [npmjs.com](https://www.npmjs.com/) 和 npm CLI 中均可查看。
分步发布强化了每次发布时的身份验证,包括来自非交互式 CI/CD 工作流的发布,以及使用 OIDC 的可信发布。在分步包发布到注册表之前,必须有一位拥有双因素认证挑战的人工维护者进行批准。
分步发布现已上线,文档也已更新。
- [概述和入门](https://docs.npmjs.com/staged-publishing)
- [CLI 参考和权限](https://docs.npmjs.com/cli/v11/commands/npm-trust#permissions)
- [可信发布者(更新版)](https://docs.npmjs.com/trusted-publishers)
### 要求(https://github.blog/changelog/2026-05-22-staged-publishing-and-new-install-time-controls-for-npm/#requirements)
- **需要 npm CLI 11.15.0 或更高版本** 才能使用 `npm stage` 命令。
- 在希望使用分步行为的地方,将 CI/CD 工作流中的 `npm publish` 更新为 `npm stage publish`。
### 推荐配置(https://github.blog/changelog/2026-05-22-staged-publishing-and-new-install-time-controls-for-npm/#recommended-setup)
我们建议将分步发布与 **可信发布(OIDC)** 结合使用。可信发布配置可以限制为 **仅分步**,这意味着来自该工作流的 `npm publish` 将被拒绝,仅接受 `npm stage publish`。您的 CI 工作流继续以非交互方式运行,维护者稍后从网站或 CLI 批准分步版本。
您也可以在本地运行 `npm stage publish`,但最有价值的配置是:CI 发布到分步队列,维护者从受信任的设备进行批准。
如果您已经批量管理可信发布配置(2026 年 2 月发布,详见 [此处](https://github.blog/changelog/2026-02-18-npm-bulk-trusted-publishing-config-and-script-security-now-generally-available/)),可以使用它来将您的包迁移到分步发布。请记得将 CI 工作流更新到新的 CLI 版本,并使用 `npm stage publish`。
## 新的安装源标志(https://github.blog/changelog/2026-05-22-staged-publishing-and-new-install-time-controls-for-npm/#new-install-source-flags)
在 [npm 11.10.0](https://github.blog/changelog/2026-02-18-npm-bulk-trusted-publishing-config-and-script-security-now-generally-available/) 中,我们引入了 `--allow-git`,让您可以控制 `npm install` 是否从 Git 源解析依赖。从 **npm 11.15.0** 开始,我们新增了三个标志,以便您对每个非注册表安装源应用相同的显式允许列表方式:
- `--allow-file`:控制从本地文件路径和本地 tarball 安装。
- `--allow-remote`:控制从远程 URL(包括 https tarball)安装。
- `--allow-directory`:控制从本地目录安装。
- `--allow-git`(已有):控制从任何 Git 源安装,包括 `github:`、`gitlab:`、`git+` URL 以及裸写的 `owner/repo` 简写。
每个标志接受 `all`(当前默认值)或 `none`,也可以在 `.npmrc` 或 `package.json` 配置中设置。
通过查看我们的文档了解更多信息:
- [`npm install` 参考](https://docs.npmjs.com/cli/v11/commands/npm-install#allow-directory)(`--allow-file`、`--allow-remote`、`--allow-git` 变体在同一页面)
- [配置参考](https://docs.npmjs.com/cli/v11/using-npm/config#allow-directory)
提醒一下,根据 2026 年 2 月的公告,`--allow-git` 将在 CLI 的下一个主要版本(**v12**)中将其默认值从 `all` 更改为 `none`。新的 `--allow-file`、`--allow-remote` 和 `--allow-directory` 标志是在 11.15.0 中添加的——您可以通过将其设置为 `none` 立即选择更严格的行为。
---
## 参与讨论(https://github.blog/changelog/2026-05-22-staged-publishing-and-new-install-time-controls-for-npm/#join-the-discussion)
我们想听听您如何推出这些功能。请在 [GitHub 社区讨论](https://github.com/orgs/community/discussions/196675) 中分享反馈和问题。
相似文章
npm 包的分阶段发布
npm 引入了分阶段发布功能,允许包维护者在更新上线前通过双因素认证进行审核和批准,从而增强安全性。
NPM v12 即将到来的破坏性变更
npm v12 对 npm install 引入了安全相关的破坏性变更,默认禁用脚本、git 依赖和远程 URL 依赖的自动执行。用户可以通过升级到 npm 11.16.0+ 并查看警告信息来提前准备,显式选择信任行为。
Show HN: Safe-install – 通过可信构建依赖实现更安全的 NPM 安装
介绍了一个名为 safe-install 的新 npm 包,旨在通过允许开发者默认禁用安装脚本并屏蔽异类子依赖来增强供应链安全,从而应对持续存在的安全漏洞。
@RhysSullivan: 刚刚在我机器上启用了 npm 包安装的最小年龄限制,早就该这么做了,如果你还没做的话……
一位开发者分享了一个技巧,为包安装配置最小发布年龄以缓解供应链攻击。
@DeRonin_: 使用本指南保护你的计算机免受 NPM 攻击,这些攻击会在一次安装中窃取一切。TanStack,一个代码库使用……
本文详细介绍了针对 NPM 上 TanStack 库的供应链攻击,并提供了一份全面的指南,通过锁定依赖项发布年龄、固定版本以及对 CI/CD 流水线和 IDE 扩展进行审计,来保护开发环境的安全。