首页/新闻资讯/正文详情

release-it 预发布(Pre-release)完整实战指南:从 alpha/beta/rc 到稳定版的版本管理

发布时间:2026/9/25 7:18:00 来源:云帆数科 栏目:资讯中心
release-it 预发布(Pre-release)完整实战指南:从 alpha/beta/rc 到稳定版的版本管理
开发工具DevOps【免费下载链接】release-it Automate versioning and package publishing项目地址https://gitcode.com/gh_mirrors/re/release-it点击查看免费下载导读本文基于 release-it 官方文档 docs/pre-releases.md 并结合仓库源码系统讲解如何用 release-it 管理预发布版本在版本尚未进入稳定 semver 区间时用 alpha、beta、rcrelease candidate等标识符提前发布给部分用户验证。读完本文你将掌握--preRelease简写与底层选项的对应关系、从 beta 一路推进到 rc 再到 stable 的完整发布流程、--preReleaseBase的计数起点控制以及如何用--git.tagExclude让 changelog 覆盖全部预发布期间的提交。什么是预发布Pre-release预发布版本指尚不在稳定语义化版本区间内但要提前对外提供的软件版本。常见的预发布标识符有alpha、beta和rcrelease candidate候选发布版。在 npm 生态中这类版本通常通过 npm dist-tag如next、beta单独标记普通用户执行npm install仍会拿到稳定版只有显式安装指定 tag 的用户才会得到预发布版本。语义化版本规范semver中预发布版本号形如2.0.0-beta.02.0.0是目标主版本beta是预发布标识符末尾.0是该标识符下的计数序号。关于 semver 的完整定义可参考 semver.org文档外部链接语义即版本三段式 预发布后缀。快速开始从稳定版发布第一个 beta假设awesome-pkg当前版本是1.3.0新的大版本功能已开发完成准备发布新主版本的第一个 betarelease-it major --preReleasebeta执行后 release-it 会打 tag 并发布2.0.0-beta.0。这里有几个值得注意的联动效果普通npm install awesome-pkg得到的依然是1.3.0稳定版不受影响包的 npm dist-tag 为beta需要预发布版的用户通过npm install awesome-pkgbeta安装GitHub 上的 Release 会被标记为 Pre-release预发布不会出现在默认的 Latest 列表中。上述命令实际上是下面这条完整命令的简写release-it premajor --preReleaseIdbeta --npm.tagbeta --github.preRelease也就是说--preReleasebeta这一处简写同时承担了三件事把增量类型修正为 premajor、设置预发布标识符、并把 npm tag 与 GitHub 预发布标记联动起来。源码视角--preRelease 简写是如何展开的在 lib/config.js 中expandPreReleaseShorthand函数负责把preRelease展开为内部统一的version对象const isPreRelease Boolean(preRelease) || Boolean(snapshot); const inc snapshot ? prerelease : increment; const preId typeof preRelease string ? preRelease : typeof snapshot string ? snapshot : preReleaseId; options.version { increment: inc, isPreRelease, preReleaseId: preId, preReleaseBase };关键点--preReleasebeta字符串形式会把beta作为preReleaseId传入版本计算命令行参数解析中preRelease被定义为混合类型选项见 lib/args.js既可作布尔开关--preRelease不带值也可接字符串值--preReleaserctest/args.js 验证了true、字符串和false三种形态都能被正确解析展开后的结果在 test/config.js 有完整的单元测试覆盖。源码视角版本增量计算预发布版本号由 lib/plugin/version/Version.js 中的类型常量驱动const RELEASE_TYPES [patch, minor, major]; const PRERELEASE_TYPES [prepatch, preminor, premajor]; const CONTINUATION_TYPES [prerelease, pre];incrementVersion方法同文件 L93-L130的核心逻辑当isPreRelease为真且没有显式增量时若最新版本本身已是预发布如2.0.0-beta.0则直接走prerelease续增2.0.0-beta.1若以稳定版如1.3.0为基础发起预发布普通类型会被归一化major isPreRelease → premajor得到2.0.0-beta.0测试见 test/version.jsCI 模式下若不指定增量预发布默认使用prepatch见 test/version.js 的 CI 分支用例。完整预发布生命周期beta → rc → stable连续发布 beta 版本第一个2.0.0-beta.0发布后后续的 beta 修正2.0.0-beta.1、2.0.0-beta.2……无需再指定标识符直接执行release-it --preRelease此时--preRelease仅作为布尔开关release-it 检测到最新 tag 已是预发布版本会自动在同一标识符下续增计数。推进到 Release Candidate当 beta 阶段功能冻结准备进入候选发布阶段时release-it --preReleasercrelease-it 会识别到新的预发布标识符rc从2.0.0-rc.0开始新一轮计数而不是在 beta 计数上继续。最终发布稳定版候选发布验证通过后直接以稳定版本收尾release-it major此时版本号变更为2.0.0npm tag 回到latestGitHub Release 也不再是预发布标记。源码视角npm dist-tag 的自动解析为什么 beta 阶段 npm tag 是beta、最终却自动回到latest关键在于 lib/plugin/npm/npm.js 的resolveTagasync resolveTag(version) { const { tag } this.options; const { isPreRelease, preReleaseId } parseVersion(version); if (!isPreRelease) { return DEFAULT_TAG; // latest } else { return tag || preReleaseId || (await this.guessPreReleaseTag()); } }版本号非预发布 → 固定使用latest预发布 → 优先用显式配置的npm.tag其次用preReleaseId即beta/rc等最后兜底去 npm registry 猜一个guessPreReleaseTag会先尝试匹配 dist-tags找不到则退回next见同文件 L273-L284。源码视角GitHub Pre-release 标记GitHub 插件的 lib/plugin/github/GitHub.js 在创建 Release 时计算prerelease字段prerelease: isPreRelease || preRelease,即只要当前版本是预发布版本或显式设置了--github.preReleaseGitHub Release 就会被标记为预发布。默认配置中github.preRelease为false见 config/release-it.json所以该标记主要依赖版本本身是否为预发布。下面这张动图演示了从 beta 到 rc 再到稳定版的完整交互式发布流程来源文档配图 docs/assets/release-it-prerelease.gif让 changelog 覆盖整个预发布期间--git.tagExclude发布稳定版2.0.0时如果希望 changelog 包含自上一个主版本 tag如1.3.0以来的全部提交——包括所有 beta/rc 期间的提交——默认行为可能不符合预期因为 release-it 默认寻找最近的 tag而最近的 tag 往往是2.0.0-rc.x这类预发布 tag。此时使用release-it major --git.tagExclude*[-]*--git.tagExclude会排除名称中包含-的 tag预发布版本号必然包含-从而找到最新的、匹配主版本格式的稳定 tagchangelog 便能完整覆盖自该 tag 以来的所有提交。源码视角tagExclude 的实现位置在 lib/plugin/GitBase.js 的getLatestTagName中const exclude this.options.tagExclude ? --exclude${format(this.options.tagExclude, context)} : ; // ... return this.exec(git describe --tags --match${match} --abbrev0${exclude}, { options });tagExclude被直接拼接进git describe --tags --exclude...命令同时支持getLatestTagFromAllRefs模式见同文件 L116-L123。该选项的 schema 定义在 schema/git.json默认值为null命令行解析注册在 lib/args.js。在未来的次版本上开新预发布线preminor --preReleasealpha假设当前最新发布是2.0.0-rc.0但新增的功能不希望进入 v2 正式版而是留给后续的 v2.1。此时可以为次版本minor创建一条全新的预发布线release-it preminor --preReleasealpha结果版本号为2.1.0-alpha.0——跳过 rc 续增直接在未来的 minor 版本上开启新的 alpha 预发布序列。这正是preminor--preReleasealpha的组合效果增量类型锁定preminor预发布标识符从rc切换到alpha计数重新从 0 开始。让预发布计数从 1 开始--preReleaseBase1默认情况下预发布计数从0开始如2.0.0-beta.0。如果希望第一个 beta 就是2.0.0-beta.1加上release-it major --preReleasebeta --preReleaseBase1--preReleaseBase的值会作为 semver 预发布计数的基数identifierBase传入版本计算。在 lib/plugin/version/Version.js 中const incrementOptions { identifier: preReleaseId, identifierBase: preReleaseBase };该值最终被传递给底层 verkit 库的increment调用Version.js相关行为在 test/version.js 中有对应用例。使用要点与常见问题与 recommended bumps 协同工作预发布功能与 release-it/conventional-changelog 这类推荐增量recommended bumps插件搭配使用效果最佳——插件会根据提交信息推荐下一个增量类型预发布标识符在此基础上叠加选项可独立覆盖简写并不排斥其它选项的定制例如release-it --preReleaserc --npm.tagnext可以在预发布的同时把 npm tag 从rc改为nextsnapshot 简写在 lib/config.js 中--snapshot与--preRelease走同一套展开逻辑且会额外预设git.tagMatch、getLatestTagFromAllRefs、requireBranch等 git 选项适合快照式临时发布场景交互式选择非 CI 环境下若不指定增量release-it 会弹出增量类型选择列表Version.js且当最新版本已是预发布时首选推荐是prerelease续增而不是 patch/minor/major。小结release-it 的预发布能力由命令行简写 → 配置展开 → 版本计算 → npm tag / GitHub 标记这一完整链路支撑--preReleasexxx一条命令即可同时完成版本号、npm dist-tag 与 GitHub Pre-release 标记三件事配合preminor、--preReleaseBase可以灵活管理多条预发布线--git.tagExclude保证 changelog 不遗漏预发布期间的提交。相关实现细节可继续查阅 lib/config.js、lib/plugin/version/Version.js、lib/plugin/GitBase.js 与 lib/plugin/npm/npm.js以及 docs/configuration.md 和 docs/git.md 获取更多配置说明。赞分享开发工具DevOps【免费下载链接】release-it Automate versioning and package publishing项目地址https://gitcode.com/gh_mirrors/re/release-it点击查看免费下载相关推荐预发布版本管理不再难release-it 的 alpha/beta/rc 工作流实战指南预发布版本管理不再难release it 的 alpha/beta/rc 工作流实战指南 release it 是一款自动化版本管理与包发布的 CLI开发工具DevOpschangesets 预发布Prerelease模式完全指南alpha / beta / rc 版本管理与稳定版发布的源码级解析changesets 预发布Prerelease模式完全指南alpha / beta / rc 版本管理与稳定版发布的源码级解析 本指南以仓库 site/开发工具CLIChainlit 发布工程指南语义化版本、RC 预发布与完整 Release 流程Chainlit 发布工程指南语义化版本、RC 预发布与完整 Release 流程 导读 RELENG.md https://link.gitcode.com人工智能大模型AI 应用后端前端上一篇如何快速上手openJiuwen的6类Issue模板从0到提交第一个有效Bug报告的完整教程下一篇VideoDownloader让视频下载像喝水一样简单的实用工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Atlas 300V 24G部署YOLO实战:从CANN环境到模型转换与推理调优
Atlas 300V 24G部署YOLO实战:从CANN环境到模型转换与推理调优

1. 先掰扯清楚:Atlas 300V 24G到底是“什么卡”最近后台好几个朋友问我一件事:买了一张Atlas 300V 24G,打算部署YOLO做目标检测,结果折腾了好几天,模型转换不过去、推理速度上不来,甚至有人卡在第一步——没… · 2026/9/25 7:17:54

Secretive 安全模型解析:基于 Secure Enclave 的 SSH 密钥不可导出设计与漏洞报告实践
Secretive 安全模型解析:基于 Secure Enclave 的 SSH 密钥不可导出设计与漏洞报告实践

桌面应用应用安全密码学 【免费下载链接】secretive Protect your SSH keys with your Macs Secure Enclave 项目地址: https://gitcode.com/gh_mirrors/se/secretive 点击查看 免费下载 导读 Secretive 是一个使用 Mac 的 Secure Enclave(安全隔区&am… · 2026/9/25 7:17:48

React Native Skia 位移贴图(DisplacementMap)图像滤镜完整指南:原理、参数与源码解析
React Native Skia 位移贴图(DisplacementMap)图像滤镜完整指南:原理、参数与源码解析

图形学移动开发跨平台UI组件 【免费下载链接】react-native-skia High-performance React Native Graphics using Skia 项目地址: https://gitcode.com/gh_mirrors/re/react-native-skia 点击查看 免费下载 DisplacementMap 是 React Native Skia 提供的图像滤镜组… · 2026/9/25 7:17:48

MikroORM 日志系统完全指南:从 debug 模式到自定义 Logger 的深度实践
MikroORM 日志系统完全指南:从 debug 模式到自定义 Logger 的深度实践

后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址: https://gitcode.com/gh_mir… · 2026/9/25 7:48:37

Plannotator 注解任意网页与 HTML 文件:从 URL 抓取到结构化反馈的完整指南
Plannotator 注解任意网页与 HTML 文件:从 URL 抓取到结构化反馈的完整指南

【免费下载链接】plannotator Annotate and review coding agent plans and code diffs visually, share with your team, send feedback to agents with one click. 项目地址: https://gitcode.com/gh_mirrors/pl/plannotator 点击查看 免费下载 Plannotator 是面… · 2026/9/25 7:48:25

邓白氏编码如何申请?步骤、条件、营业执照和对公账户一次讲清楚
邓白氏编码如何申请?步骤、条件、营业执照和对公账户一次讲清楚

很多做外贸、跨境电商或者准备入驻大平台的朋友,领先次听到“邓白氏编码”这四个字,脑袋是懵的。有人被客户催着要,有人卡在平台审核环节,还有人以为这玩意儿只有大公司才能办。其实真没那么玄乎,今天我就用最白话的方… · 2026/9/25 7:48:25

如何实现闲鱼批量抓取采集自动化?云端分布式+多IP段,大促期间弹性扩到50核
如何实现闲鱼批量抓取采集自动化?云端分布式+多IP段,大促期间弹性扩到50核

如何实现闲鱼批量抓取采集自动化?云端分布式多IP段,大促期间弹性扩到50核 说句掏心窝的话,做店群的,工具选对了事半功倍。闲鱼的批量抓取采集,是店群运营中最耗人力也最容易出错的环节。 采集竞品数据是店群运营的命脉… · 2026/9/25 7:48:19

热门的全自动压力校验仪生产厂家选购参考汇总,北京斯贝克实力与用户口碑
热门的全自动压力校验仪生产厂家选购参考汇总,北京斯贝克实力与用户口碑

北京斯贝克科技有限责任公司作为国内专注压力温度校准仪器仪表自主研发生产的高新技术企业,聚焦工业现场检定与实验室精密计量场景,为企业计量室、第三方校准机构及各级计量院所提供自动化检表、精密建标、现场校准等全场景计量解决方案,覆盖… · 2026/9/25 7:48:19

Matplotlib核心概念:理解figure、axes、axis关系及axes API绘图实践
Matplotlib核心概念:理解figure、axes、axis关系及axes API绘图实践

1. 先搞清楚figure、axes、axis的关系1.1 拿一张白纸来理解figure很多人在接触Matplotlib之后,第一个绕不过去的坎就是figure、axes、axis这三组概念。我在刚入行的时候也是这样,明明只是画个折线图,却被这三个名字折腾得够呛。等到后来靠axe… · 2026/9/25 7:48:19

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码