预发布版本管理不再难:release-it 的 alpha/beta/rc 工作流实战指南
【免费下载链接】release-it🚀 Automate versioning and package publishing项目地址: https://gitcode.com/gh_mirrors/re/release-it
🚀release-it是一款自动化版本管理与包发布的 CLI 工具,它内置了对预发布版本(prerelease)的完整支持:一条命令即可完成 alpha、beta、rc 标签的打版、提交、推送与发布,让"从 1.3.0 走到 2.0.0-rc.0"这样的版本演进变成机械操作。
一、为什么预发布总是让人头疼?
正式大版本(比如 2.0)往往要经历alpha → beta → rc → 正式版的漫长过程。手工管理这些版本时,你通常需要:
- 手动改
package.json里的版本号,还得保证符合 语义化版本 规则 - 打 git tag、写 release commit、push 并同步 tag
- 用
npm publish --tag beta之类的参数发布到非 latest 通道 - 在 GitHub/GitLab 上手动创建 Release 并勾选 "pre-release"
release-it 把上面所有事情压缩成一条命令。它会自动判断当前版本是否已是预发布、续接正确的版本号(-beta.0、-beta.1…)、选择对应的 npm dist-tag,并在 GitHub Release 上自动打上 Pre-release 标记。
二、最快上手:一条命令发出第一个 beta
假设你的包awesome-pkg当前版本是1.3.0,正在开发新的大版本。要发布第一个 beta:
release-it major --preRelease=beta执行后会发生什么?
| 动作 | 结果 |
|---|---|
| 版本号 | 自动变为2.0.0-beta.0 |
| Git | 提交并打 tagv2.0.0-beta.0,push 时同步 tag |
| npm | 发布到beta通道,npm install awesome-pkg仍安装稳定的1.3.0 |
| GitHub | 创建 Release 并自动标记为Pre-release |
这条命令等价于release-it premajor --preReleaseId=beta --npm.tag=beta --github.preRelease,即自动帮你补齐了所有关联参数,这正是它好用的核心原因。
三、alpha → beta → rc → 正式版:完整工作流
下面是预发布阶段推进的标准节奏(完整说明见 docs/pre-releases.md):
1. 从 beta 继续迭代(2.0.0-beta.1、2.0.0-beta.2…)
release-it --preRelease不指定版本号时,release-it 检测到当前 tag 已是预发布,就会自动续接下一个序号(beta.0 → beta.1)。
2. 进入下一阶段:发布 rc
release-it --preRelease=rc产出2.0.0-rc.0。想发多个 rc 就反复执行上一条命令。
3. rc 验证通过,发布正式版
release-it major产出干净的2.0.0,npmlatest通道更新。
💡小贴士:正式版发布时,如果想把预发布期间的所有 commit 都写进 changelog,可以加上--git.tagExclude='*[-]*',让 release-it 从最近的非预发布 tag开始收集提交。
四、不知道参数填什么?交给交互式模式
release-it 不带参数直接运行时会进入交互式引导,版本递增选项会根据当前状态动态变化:
- 最新 tag 是预发布时:提供
prerelease / patch / minor / major选项 - 明确指定了
--preRelease时:只提供prepatch / preminor / premajor
这套选项逻辑定义在 lib/plugin/version/Version.js 中,版本号的实际递增由incrementVersion方法完成(Version.js#L93-L130)。
五、三个关键选项速查
| 选项 | 作用 | 示例 |
|---|---|---|
--preRelease | 启用预发布;传字符串则指定 id | --preRelease=rc |
--preReleaseId | 等价写法,仅指定预发布 id | --preReleaseId=beta |
--preReleaseBase | 预发布序号从几开始(默认从 0 开始) | --preReleaseBase=1得到2.0.0-beta.1 |
--git.tagExclude | 正式版 changelog 的起始 tag 排除规则 | --git.tagExclude='*[-]*' |
这些命令行参数在 lib/args.js 中注册,默认值则收敛在 config/release-it.json(例如 GitHub 侧的preRelease: false默认关闭,避免误发)。
六、预发布如何"聪明地"联动 npm 与 GitHub?
- npm 通道自动推断:发布预发布版本时,lib/plugin/npm/npm.js 会优先使用你显式指定的
npm.tag,否则自动取预发布 id 作为 dist-tag(发beta就发到beta通道),用户用npm install awesome-pkg@beta安装。 - GitHub 自动标记 Pre-release:lib/plugin/github/GitHub.js 会解析版本号,只要版本本身是预发布就自动设置
prerelease: true,无需手动在网页上勾选。 - 单独覆盖:所有联动都可以逐项覆盖,例如
release-it --preRelease=rc --npm.tag=next。
七、最佳实践与常见坑
- 预发布要配合递增类型使用:
major+--preRelease实际执行的是premajor(Version.js#L120-L122),这是与约定式版本号的配合方式,别指望手动拼2.0.0-beta.0的 tag。 - 大版本之外想提前试水 v2.1?在
2.0.0-rc.0之后新增了不该进 v2 的功能时,可以为下一个 minor 单开一条预发布线:release-it preminor --preRelease=alpha(得到2.1.0-alpha.0),两条预发布线互不干扰。 - 序号从 0 还是 1 开始:团队习惯不同,用
--preReleaseBase=1统一即可,避免beta.0看起来像"没发过"。 - 发布前用 dry-run:加
--dry-run可预演整个流程(见 docs/dry-runs.md),确认版本号、tag 名、npm 通道无误再真正执行。
八、延伸阅读
- 预发布专题文档:docs/pre-releases.md
- 全量配置项说明:docs/configuration.md
- npm 插件配置:docs/npm.md、GitHub 发布配置:docs/github-releases.md
- 版本号核心逻辑源码:lib/plugin/version/Version.js
- 交互式引导 GIF 与预发布演示动图位于 docs/assets/ 目录
掌握这条alpha → beta → rc → 正式版的流水线后,预发布就从"高危手工操作"变成了随手一条命令的日常动作。✨
【免费下载链接】release-it🚀 Automate versioning and package publishing项目地址: https://gitcode.com/gh_mirrors/re/release-it
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考