新闻详情

新闻详情

首页 / 资讯中心 / 详情

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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

安卓逆向助手:抓包脱壳反编译全流程脚本化实战 2026/9/25 7:50:58

安卓逆向助手:抓包脱壳反编译全流程脚本化实战

简介:安卓逆向助手是一款面向Android应用开发者与安全研究人员的图形化逆向工具,旨在降低APK反编译与分析门槛,让初学者也能快速理解应用内部结构。它集成dex2jar、JD-GUI、apktool、baksmali等常用组件,支持一键将Dalvik字节码转…

阅读更多 →
通信驱动的CRM工作台:DeskcommCRM设计思路与落地实践 2026/9/25 7:50:45

通信驱动的CRM工作台:DeskcommCRM设计思路与落地实践

最近大半年我在推进一个项目,内部代号 DeskcommCRM,聊的人不多,但用起来确实和传统 CRM 是两个思路。它不是那种把客户信息塞进数据库就完事的系统,而是把“客户关系”这件事重新拉回到桌面上——电话、邮件、会话、跟进记录&…

阅读更多 →
手机云原生开发实战:终端兼容性与云原生IDE选型指南 2026/9/25 7:50:38

手机云原生开发实战:终端兼容性与云原生IDE选型指南

1. 这不是“手机上写个Hello World”——而是真正在移动设备上跑通完整开发闭环2026年,我用折叠屏手机在高铁上完成了从需求评审、代码编写、单元测试到容器镜像构建、Kubernetes集群部署的全流程。没有远程桌面,不依赖PC中转,整个过程在终端…

阅读更多 →
Twig html_attr_type 过滤器:将数组转换为符合 HTML 属性语法的专用值对象 2026/9/25 7:50:38

Twig html_attr_type 过滤器:将数组转换为符合 HTML 属性语法的专用值对象

后端 【免费下载链接】Twig Twig, the flexible, fast, and secure template language for PHP 项目地址: https://gitcode.com/gh_mirrors/tw/Twig 点击查看 免费下载 本文介绍 Twig html-extra 包中的 html_attr_type 过滤器:它把普通的 PHP 数组转换…

阅读更多 →
SPL 迁移到 Axiom APL 实战指南:基于 spl-to-apl 技能的完整查询翻译手册 2026/9/25 7:50:38

SPL 迁移到 Axiom APL 实战指南:基于 spl-to-apl 技能的完整查询翻译手册

后端前端AI 技能AI 插件搜索引擎 【免费下载链接】clawhub Skill Plugin Registry for OpenClaw 项目地址: https://gitcode.com/gh_mirrors/mo/clawhub 点击查看 免费下载 本指南围绕本仓库 .agents/skills/spl-to-apl/ 目录下的 SPL→APL 翻译技能展开&#xff…

阅读更多 →
Solaar 内部实现剖析:Linux 下 Logitech HID++ 设备管理的三层架构 2026/9/25 7:50:32

Solaar 内部实现剖析:Linux 下 Logitech HID++ 设备管理的三层架构

开发工具 【免费下载链接】Solaar Linux device manager for Logitech devices 项目地址: https://gitcode.com/gh_mirrors/so/Solaar 点击查看 免费下载 本文依据仓库内 docs/implementation.md 的系统架构文档,结合 lib/logitech_receiver、lib/hidap…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉