业界常用的软件版本分类和区别
Alpha 版本
- 定义:软件开发的早期版本,通常只有开发团队或内部人员使用。
- 特点:功能可能还不完整,存在很多错误和问题,主要用于验证功能和开发测试。
- 目的:通过内部测试发现和修复严重的错误,并进行初步的功能验证。
Beta 版本
- 定义:在 Alpha 版本之后发布的版本,通常提供给有限的外部用户进行测试。
- 特点:相比 Alpha 版本更稳定,功能更接近最终版本,但仍可能包含一些错误。通常包括所有主要功能。
- 目的:通过更广泛的用户测试,进一步发现和修复错误,收集用户反馈,以改进稳定性和用户体验。
Release Candidate (RC) 版本
- 定义:Beta 版本之后发布的版本,接近最终的正式版本,俗称预发布版,例如微信开发者工具就有预发布版、开发版、稳定版之分。
- 特点:几乎没有已知的严重错误,功能设计已敲定,只进行错误修复和优化。如果没有重大问题,可能成为最终的正式版本。
- 目的:通过最后阶段的测试,确认软件已经足够稳定,适合正式发布。
正式版本(Release/Stable)
- 定义:经过充分测试和验证后发布的版本,面向大众正式使用。
- 特点:应当是稳定可靠的,具备完整的功能和文档支持。
- 目的:提供给所有用户,作为最终的产品版本。
维护版本(Patch/Hotfix)
- 定义:对正式版本的小规模更新,通常用于修复错误或安全漏洞。
- 特点:不引入新的功能,仅做出小幅修正。
- 目的:迅速修复问题,确保软件的持续稳定性和安全性。
开发版本(Nightly/Dev)
- 定义:这是每天或定期自动构建的版本,包含最新的更改和功能。
- 特点:不稳定,可能包含未完成的功能和新引入的错误,通常仅供小部分开发者或技术爱好者使用。
- 目的:测试最新的更改,并为开发人员提供持续的反馈。
每个阶段的版本都有其特定的目标和受众,确保软件逐步走向稳定和成熟。
管理npm包版本
了解上述概念后,我们在开发和维护自己的npm包时就可以应用到了,那么具体怎么用呢?
npm 遵循语义化版本控制(SemVer)规范,版本号通常以 MAJOR.MINOR.PATCH 的形式表示,其中:
- MAJOR:主要版本,不兼容的功能修改。
- MINOR:次要版本,当你做了向下兼容的功能性新增时使用。
- PATCH:补丁版本,当你做了向下兼容的问题修复时使用。
主要版本 0 (0.y.z) 用于初始开发,在这个阶段,API 可能会频繁变化,开发者可以自由地进行重大改动,不保证 API 的稳定性,适合用于内部测试或早期用户测试,收集反馈并验证基本的功能,不建议用于生产。
1.0.0 用于对外正式发布稳定版,之后的迭代遵循规范即可。
此外,还可以通过附加标签(pre-release identifiers)来标识不同的开发阶段,如 alpha、beta、rc 。
使用附加标签发布 npm 包
Alpha 版本
- 版本号格式:
1.0.0-alpha、1.0.0-alpha.1、1.0.0-alpha.2 - 使用方法:适用于早期测试阶段,使用
npm publish --tag alpha发布。
Beta 版本
- 版本号格式:
1.0.0-beta、1.0.0-beta.1、1.0.0-beta.2 - 使用方法:功能较为稳定,但仍需要广泛测试。可以通过
npm publish --tag beta发布。
Release Candidate (RC) 版本
- 版本号格式:
1.0.0-rc、1.0.0-rc.1、1.0.0-rc.2 - 使用方法:接近正式发布,等待反馈或仅剩一些小的调整。可以通过
npm publish --tag rc发布。
正式版本
- 版本号格式:
1.0.0 - 使用方法:功能完整且稳定的版本。可以通过
npm publish发布,没有特殊的标签。
具体步骤
初始化或更新版本号
自行修改package.json或使用 npm version [newversion] 来更新 package.json 中的版本号。例如,npm version 1.0.0-alpha.1 会将版本号更新为 1.0.0-alpha.1。
发布包
- 发布 alpha 版本:
npm publish --tag alpha - 发布 beta 版本:
npm publish --tag beta - 发布 rc 版本:
npm publish --tag rc - 发布正式版本:
npm publish
安装非正式版本
通过 npm install your-package@alpha 来安装 alpha 版本,通过 npm install your-package@beta 安装 beta 版本等。
预发布版本的优先级
在 SemVer 中,带有预发布标签的版本(如 1.0.0-alpha.1)的优先级低于同样的稳定版本(如 1.0.0)。这意味着当执行 npm install your-package 时,如果你没有明确指定标签(如 @alpha),npm 会默认安装最高版本的正式版本(没有预发布标签的版本)。
注意,如果你使用
npm publish而没有加--tag beta发布了非正式版本,如1.0.0-beta.1,那么使用npm install your-package安装时会优先安装1.0.0-beta.1而不是1.0.0,因为你没有在发布时打特殊标签
调试本地包
仅本地调试时不需要每次都发布版本这么麻烦啦,可以去看下这篇文章 还在用npm link?yalc: 更丝滑的前端link调试方案