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,带动态口令的双因素留给人工发布。