Appearance

软件版本号详解:从语义化版本到预发布标识

zhaoyifan2023/06/08其他其他 Axios

软件版本号详解:从语义化版本到预发布标识

语义化版本(Semantic Versioning)

语义化版本是目前最广泛使用的版本号规范,格式为:主版本号.次版本号.修订号(MAJOR.MINOR.PATCH)

版本格式:X.Y.Z

X: 主版本号(Major)- 不兼容的 API 修改
Y: 次版本号(Minor)- 向下兼容的功能性新增
Z: 修订号(Patch)  - 向下兼容的问题修正

示例说明

1.0.0  →  首次正式发布
1.0.1  →  修复了一些 bug,向下兼容
1.1.0  →  新增了功能,向下兼容
2.0.0  →  有破坏性更新,不向下兼容

版本号递增规则

  1. 修订号(Patch):修复 bug,不影响 API

    • 1.0.01.0.1
    • 例如:修复内存泄漏、样式问题等
  2. 次版本号(Minor):新增功能,但向下兼容

    • 1.0.11.1.0
    • 例如:新增 API、新增组件等
    • 修订号归零
  3. 主版本号(Major):重大更新,不兼容旧版本

    • 1.1.02.0.0
    • 例如:API 重构、删除废弃功能等
    • 次版本号和修订号都归零

npm 版本符号详解

package.json 中,版本号前的符号决定了依赖包的更新策略:

符号说明示例允许安装的版本范围
^(插入符)兼容补丁和次要版本更新^1.2.3>=1.2.3 <2.0.0
~(波浪符)只兼容补丁版本更新~1.2.3>=1.2.3 <1.3.0
*接受任何版本*任何版本
>大于某个版本>1.2.3>1.2.3
>=大于或等于某个版本>=1.2.3>=1.2.3
<小于某个版本<1.2.3<1.2.3
<=小于或等于某个版本<=1.2.3<=1.2.3
无符号精确匹配1.2.31.2.3(完全匹配)
-版本范围1.2.3 - 2.3.4>=1.2.3 <=2.3.4
||^1.0.0 || ^2.0.01.x.x 或 2.x.x

常用符号详解

插入符 ^(最常用)

"vue": "^3.2.0"
  • 允许更新次版本号和修订号
  • ^3.2.0 可以安装 3.2.03.x.x(但不包括 4.0.0
  • npm install 默认使用 ^

波浪符 ~(更严格)

"axios": "~1.2.0"
  • 只允许更新修订号
  • ~1.2.0 可以安装 1.2.01.2.x(但不包括 1.3.0
  • 适合对稳定性要求高的场景

精确版本(最严格)

"react": "18.2.0"
  • 完全锁定版本,不允许任何更新
  • 适合生产环境或对版本极其敏感的依赖

预发布版本标识

预发布版本通过在版本号后添加连字符和标识符来表示:

1.0.0-alpha.1   → Alpha 内测版本
1.0.0-beta.1    → Beta 公测版本
1.0.0-rc.1      → Release Candidate 候选版本

版本阶段说明

版本标识全称说明适用场景
alphaAlpha(内测版)内部测试版本,功能不完整,存在较多 bug开发团队内部测试
betaBeta(公测版)公开测试版本,功能基本完整,会持续加入新功能公开测试,收集反馈
rcRelease Candidate发布候选版本,功能完整,不再增加新功能,主要修复 bug正式发布前的最后测试
stableStable(稳定版)正式发布的稳定版本生产环境使用
ltsLong Term Support长期支持版本,会持续维护和修复 bug对稳定性要求高的项目
nextNext(下一代版本)下一个大版本的开发版本尝鲜最新特性
canaryCanary(金丝雀版)每日构建版本,包含最新提交的代码开发者测试最新功能

版本发布流程

开发阶段
  ↓
1.0.0-alpha.1  → 内部测试,功能开发中
  ↓
1.0.0-alpha.2  → 修复 bug,继续开发
  ↓
1.0.0-beta.1   → 公开测试,功能基本完成
  ↓
1.0.0-beta.2   → 修复 bug,优化性能
  ↓
1.0.0-rc.1     → 发布候选,准备发布
  ↓
1.0.0-rc.2     → 最后的 bug 修复
  ↓
1.0.0          → 正式发布 🎉

实际应用示例

Vue 3 的版本发布

3.0.0-alpha.0   → 2020-01-16  第一个内测版
3.0.0-alpha.13  → 2020-07-18  最后一个内测版
3.0.0-beta.1    → 2020-04-16  第一个公测版
3.0.0-beta.24   → 2020-08-20  最后一个公测版
3.0.0-rc.1      → 2020-07-18  第一个候选版
3.0.0-rc.13     → 2020-09-17  最后一个候选版
3.0.0           → 2020-09-18  正式发布
3.0.1           → 2020-09-19  修复 bug
3.1.0           → 2021-06-07  新增功能
3.2.0           → 2021-08-09  新增功能

React 的版本策略

16.8.0  → 引入 Hooks
17.0.0  → 无新功能,专注于升级便利性
18.0.0  → 引入并发特性,重大更新

最佳实践

1. 选择合适的版本符号

{
  "dependencies": {
    // 推荐:对于成熟的库使用 ^
    "vue": "^3.2.0",
    "react": "^18.2.0",
    
    // 严格:对稳定性要求高的使用 ~
    "axios": "~1.2.0",
    
    // 锁定:生产环境关键依赖
    "typescript": "5.0.4"
  },
  "devDependencies": {
    // 开发依赖可以放宽限制
    "vite": "^4.0.0"
  }
}

2. 使用 package-lock.json

  • 锁定所有依赖的精确版本
  • 确保团队成员安装相同的依赖版本
  • 避免 "在我机器上能运行" 的问题

3. 定期更新依赖

# 查看可更新的依赖
npm outdated

# 更新所有依赖到符合规则的最新版本
npm update

# 更新到最新版本(可能包含破坏性更新)
npm install <package>@latest

4. 发布自己的包时

# 发布修订版本(bug 修复)
npm version patch  # 1.0.0 → 1.0.1

# 发布次版本(新功能)
npm version minor  # 1.0.1 → 1.1.0

# 发布主版本(破坏性更新)
npm version major  # 1.1.0 → 2.0.0

# 发布预发布版本
npm version prerelease --preid=alpha  # 1.0.0 → 1.0.1-alpha.0

其他概念

RTM(Release to Manufacturing)

制造发布版本,软件正式交付给生产商制造的版本,通常就是正式版。

LTS(Long Term Support)

长期支持版本,会持续提供安全更新和 bug 修复,适合生产环境:

Node.js LTS 版本:
- 12.x  → 2019-10 到 2022-04
- 14.x  → 2020-10 到 2023-04
- 16.x  → 2021-10 到 2024-04
- 18.x  → 2022-10 到 2025-04

Nightly Build / Canary

每日构建版本,包含最新提交的代码,用于测试最新功能:

Chrome Canary  → 每日更新的 Chrome 版本
Next.js Canary → next@canary

总结

  • 使用语义化版本:遵循 主.次.修订 规范
  • 理解版本符号^ 用于常规依赖,~ 用于严格场景
  • 关注预发布版本:了解 alpha、beta、rc 的区别
  • 锁定依赖版本:使用 package-lock.json
  • 定期更新依赖:保持依赖的安全性和稳定性

参考资源

Last Updated 11/12/2025, 1:26:20 AM