npm 包的分阶段发布
摘要
npm 引入了分阶段发布功能,允许包维护者在更新上线前通过双因素认证进行审核和批准,从而增强安全性。
<p><a href="https://lobste.rs/s/lgflsz/staged_publishing_for_npm_packages">评论</a></p>
查看缓存全文
缓存时间: 2026/05/21 06:33
# npm 包的暂存发布 | npm 文档 来源:https://docs.npmjs.com/staged-publishing/ 目录- 暂存发布的工作原理 (https://docs.npmjs.com/staged-publishing/#how-staged-publishing-works) - 前提条件 (https://docs.npmjs.com/staged-publishing/#prerequisites) - 暂存一个包 (https://docs.npmjs.com/staged-publishing/#stage-a-package) - - - 使用 CLI (https://docs.npmjs.com/staged-publishing/#using-the-cli) - 使用 npmjs\.com (https://docs.npmjs.com/staged-publishing/#using-npmjscom) - - - 使用 CLI (https://docs.npmjs.com/staged-publishing/#using-the-cli-1) - 使用 npmjs\.com (https://docs.npmjs.com/staged-publishing/#using-npmjscom-1) - 将暂存发布与可信发布者配合使用 (https://docs.npmjs.com/staged-publishing/#using-staged-publishing-with-trusted-publishers) - 了解更多 (https://docs.npmjs.com/staged-publishing/#learn-more) 暂存发布在包上线到 npm 注册表之前增加了一个审批步骤。您无需直接使用 `npm publish` 发布,而是可以通过 `npm stage publish` 将包提交到暂存区。然后,维护者必须通过 CLI 或 npmjs\.com (https://www.npmjs.com/) 使用双因素认证 (2FA) 审查并显式批准暂存的包,之后该包才会公开发布。当您希望在包版本在注册表上可用之前增加额外的审查步骤时,暂存发布非常有用。
**注意:** 暂存发布需要 npm CLI (https://docs.npmjs.com/cli/v11) 版本 11.15.0 或更高,以及 Node 版本 22.14.0 或更高。
## 暂存发布的工作原理 (https://docs.npmjs.com/staged-publishing/#how-staged-publishing-works)
暂存发布包含三个步骤:
1. [暂存一个包](https://docs.npmjs.com/staged-publishing/#stage-a-package)
2. [审查暂存的包](https://docs.npmjs.com/staged-publishing/#review-a-staged-package)
3. [批准暂存的包](https://docs.npmjs.com/staged-publishing/#approve-a-staged-package)
## 前提条件 (https://docs.npmjs.com/staged-publishing/#prerequisites)
使用暂存发布前,请确保满足以下条件:
- 您对该包具有**发布权限**
- 该包**已存在于** npm 注册表中——您不能暂存一个全新的包
- 您的 npm 账户**已启用 2FA**
## 暂存一个包 (https://docs.npmjs.com/staged-publishing/#stage-a-package)
1. 在命令行中,导航到包的根目录。
```
cd /path/to/package
```
2. 要暂存您的包,运行:
```
npm stage publish
```
这会提交您的包到暂存区。
**注意:** `npm stage publish` 不需要 2FA。
## 审查暂存的包 (https://docs.npmjs.com/staged-publishing/#review-a-staged-package)
暂存包后,您可以在 CLI 或 npmjs\.com (https://www.npmjs.com/) 上审查它。
### 使用 CLI (https://docs.npmjs.com/staged-publishing/#using-the-cli)
列出您有权限访问的暂存包:
```
npm stage list [<package-name>]
```
查看特定暂存包的详细信息:
```
npm stage view <package-name>
```
下载暂存包的 tarball 以进行检查:
```
npm stage download <package-name>
```
### 使用 npmjs\.com (https://docs.npmjs.com/staged-publishing/#using-npmjscom)
打开**暂存包**选项卡以审查暂存的包,并找到您想要批准的包。
截图显示 npmjs.com 上的暂存包选项卡,其中有待审查的暂存包
## 批准暂存的包 (https://docs.npmjs.com/staged-publishing/#approve-a-staged-package)
要将暂存的包发布到注册表,请使用 2FA 批准它。
### 使用 CLI (https://docs.npmjs.com/staged-publishing/#using-the-cli-1)
要批准暂存的包并将其发布到线上注册表:
```
npm stage approve <package-name>
```
### 使用 npmjs\.com (https://docs.npmjs.com/staged-publishing/#using-npmjscom-1)
在 npmjs\.com (https://www.npmjs.com/) 上,在**暂存包**选项卡中审查该暂存包,然后点击**批准**。
截图显示 npmjs.com 上的一个暂存包,并显示批准按钮
**注意:** 无论您是通过 CLI 还是 npmjs\.com (https://www.npmjs.com/) 批准包,系统都会提示您进行 2FA 验证。
## 将暂存发布与可信发布者配合使用 (https://docs.npmjs.com/staged-publishing/#using-staged-publishing-with-trusted-publishers)
如果您在 CI/CD 中使用[可信发布 (OIDC)](https://docs.npmjs.com/trusted-publishers),则可以使用暂存发布在包上线之前提交以供审查。维护者仍必须使用 2FA 审查并批准暂存的包。
有关配置可信发布者权限的更多信息,请参阅“[npm 包的可信发布](https://docs.npmjs.com/trusted-publishers#configuring-allowed-actions)”。
## 了解更多 (https://docs.npmjs.com/staged-publishing/#learn-more)
- [npm 包的可信发布](https://docs.npmjs.com/trusted-publishers)
- [生成出处声明](https://docs.npmjs.com/generating-provenance-statements)
## 目录
- [暂存发布的工作原理](https://docs.npmjs.com/staged-publishing/#how-staged-publishing-works)
- [前提条件](https://docs.npmjs.com/staged-publishing/#prerequisites)
- [暂存一个包](https://docs.npmjs.com/staged-publishing/#stage-a-package)
- [审查暂存的包](https://docs.npmjs.com/staged-publishing/#review-a-staged-package)
- [批准暂存的包](https://docs.npmjs.com/staged-publishing/#approve-a-staged-package)
- [将暂存发布与可信发布者配合使用](https://docs.npmjs.com/staged-publishing/#using-staged-publishing-with-trusted-publishers)
- [了解更多](https://docs.npmjs.com/staged-publishing/#learn-more)
相似文章
npm 的分阶段发布和新的安装时控制
npm 引入了分阶段发布,要求通过双因素认证(2FA)进行人工审批才能发布包,并新增了 `--allow-*` 标志(file、remote、directory)来控制安装源,从而提高了 npm CLI 11.15.0 的供应链安全性。
Show HN: Safe-install – 通过可信构建依赖实现更安全的 NPM 安装
介绍了一个名为 safe-install 的新 npm 包,旨在通过允许开发者默认禁用安装脚本并屏蔽异类子依赖来增强供应链安全,从而应对持续存在的安全漏洞。
人人都该从 npmx 偷学的功能
npmx 是一个 MIT 授权的 npm 仓库替代前端,它在安全与可用性上做了增强:展示传递式安装体积、暴露安装脚本、可视化过期/含漏洞依赖树,还逼得 npmjs.com 终于上线了深色模式。
@RhysSullivan: 刚刚在我机器上启用了 npm 包安装的最小年龄限制,早就该这么做了,如果你还没做的话……
一位开发者分享了一个技巧,为包安装配置最小发布年龄以缓解供应链攻击。
无法预防这种情况,唯一频繁发生此类事件的包管理器如此表示
讽刺文章指出npm注册表中反复出现的供应链攻击,与Go和Rust等更安全的生态系统形成对比,并嘲笑JavaScript社区对这种漏洞的接受态度。