一、版本号的秘密语言:三段式密码

  • 所有现代版本号都遵循 ​主版本.次版本.修订号​ 结构(如 3.12.4),每个数字都是开发者间的密语:

数字部分

变化规则

实际意义

​主版本​

从 1 → 2

API 发生​​破坏性变更​​,旧代码可能崩溃

​次版本​

从 1.2 → 1.3

​新增功能​​,但向下兼容

​修订号​

从 1.2.0 → 1.2.1

​修复 bug​​,不涉及功能变化

例如:

  • Vue 2.x → 3.x→ 彻底重构(主版本升级)

二、特殊符号解析:自动化依赖管理方式

1. ​​插入符 ^:允许安全升级​​

"dependencies": {
  "lodash": "^4.17.21"  // 允许 4.17.21 ≤ 版本 < 5.0.0
}
  • 允许安装:4.18.0, 4.99.99

  • 拒绝安装:5.0.0(主版本变更,可能破坏兼容性)

2. ​​波浪线 ~:锁定微小变更​​

"react": "~18.2.0"  // 仅允许 18.2.0 ≤ 版本 < 18.3.0
  • 允许安装:18.2.1, 18.2.9

  • 拒绝安装:18.3.0(次版本升级可能引入新特性)

3. ​​严格匹配:只认一个精确版本

"vue": "3.4.27"  // 只认这个精确版本

三、 0.x 版本

​主版本为 0 的版本(如 0.12.1)是特殊雷区​​:

"peerDependencies": {
  "@alpha-library": "^0.1.0"  
  // 实际允许范围:0.1.0 ≤ 版本 < 0.2.0
}
  • 允许​​:0.1.1, 0.1.9

  • 禁止​​:0.2.0(次版本变更即视为破坏性更新)

因为 0.x表示​​项目还在不稳定期​​,每次更新都可能翻天覆地!

四、版本管理的生存法则

1. ​​生产环境黄金三原则​​

{
  "dependencies": {
    // 业务库用 ^ 获取安全更新
    "axios": "^1.6.0",  
    // 底层工具库用 ~ 防止意外
    "webpack": "~5.90.0"  
  },
  "devDependencies": {
    // 测试工具允许激进更新
    "jest": "^29.0.0"  
  }
}

2. ​​锁文件:团队的版本合约​​

  • package-lock.jsonyarn.lock是项目的​​依赖快照​

  • 务必提交到 Git!确保所有成员安装完全相同的依赖树

五、“契约”开发者间的信任协议​

  1. 主版本升级 = "我要推翻之前的架构"

  2. 次版本升级 = "我新增了功能但不影响你"

  3. 修订号升级 = "我悄悄修了bug,无需通知你"

作为​​库作者​​:破坏性变更必须升主版本号

作为​​使用者​​:^用于业务库,~用于核心库

"好的开发者写代码,卓越的开发者定契约"

—— 你,正在成为后者。