首页/开发/CI/CD 与发布速查/npm 包发布要点
构建与制品管理58 条

npm 包发布要点

发布到 registry 的最小流程:名称与版本唯一、权限与双因素认证、dist-tag 管理发布通道,可附加 provenance 声明来源。

CI/CD 与发布速查开发更新于 2026-10-13

npm 发布是什么

npm publish 把包发布到 registry:名称与版本组合唯一,发布后同名版本不可复用;权限靠账号双因素或 granular access token;dist-tag(latest、next、beta)决定 npm install 默认解析到哪个版本;配 --provenance 可以在包上附一条来源声明,写明由哪个仓库哪次构建产生。私有包用 scoped 命名(@org/name)发到私有源或 npm 的私有托管。

基本信息

适用平台npm registry 及兼容私有源(Verdaccio、Nexus 等)
命令npm publish(可带 --access public 与 --provenance)
标签dist-tag(latest/next/beta)控制默认安装解析
权限scoped 包与团队权限;自动化用 granular access token

典型使用场景

  • 开源库发版:按语义化版本递增后发布,附变更日志
  • 预发布通道:beta/next 用 dist-tag 先给尝鲜者,稳定后再挪 latest
  • 私有包分发:scoped 包发到私有源,公司内统一依赖治理
  • CI 自动化发布:打标签触发流水线,granular token 授权并附 provenance
  • 发布范围治理:files 字段控制打包内容,避免测试数据外带
  • 令牌治理:本地发版开双因素认证,CI 用 granular token 且限定可发布的包范围
  • 废弃与退役:用 npm deprecate 给问题版本加说明,安装时给出警示并引导升级

发布流程

发布流程
npm ci  # 按锁文件安装,保证与 CI 一致
npm test
npm version patch --no-git-tag-version  # 只改版本号,git 标签交给发布流程
npm pack --dry-run  # 预览将发布哪些文件
npm publish --access public --provenance  # 公开发布并附来源声明
发布前用 npm pack --dry-run 检查包内容:避免把测试数据与临时文件带上,files 字段配好白名单比事后补救省事。
撤销窗口很窄:npm 对 unpublish 限制严格,发错版本更稳妥的做法是 npm deprecate 标记废弃并尽快发新版本。

dist-tag 速查

标签含义何时用
latest默认安装解析到的版本稳定版本
next预览通道大版本预演
beta灰度候选发布前小范围验证
自定义内部通道实验特性分发
发布与打标签是两件事:npm publish 只推送版本,npm dist-tag 才决定谁指向 latest,回滚通常是把标签挪回旧版本而非删包。
自动化发布别走人工二次验证:用受信发布(CI 联合身份换令牌)或 granular token,带动态口令的双因素留给人工发布。

易错点

  • 本地直接 publish:跳过 CI 测试与环境约束,应改由流水线统一发布
  • 发布即 latest:预发布通道必须用 dist-tag 隔离,避免用户默认装到未验证版本
  • 私有文件被打进包:files 白名单没配好,环境文件与测试样例随包公开
  • 版本号已存在时暴力跳号:重复推送遇错就顺手加大版本,应按语义化规则递增并说明原因
  • 令牌留在 .npmrc 里提交进仓库:自动化配置用环境变量或 OIDC 注入,仓库内只放占位说明
  • 内部包误发公共源:发布目标与 scope 前缀先核对,发现发错立即标记废弃并通知订阅方

数据来源与参考

  • npm Docs《npm publish》
  • npm Docs《Provenance》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌