有用

代码与技术常识04 / 10

语义化版本 SemVer

主版本.次版本.修订号:改坏了升第一位,加功能升第二位,修 bug 升第三位。

  • 学会用时10 分钟
  • 你的收获升级依赖前就知道风险
  • 用到的频率每周 2 次
  • 难度入门

01为什么学

没学之前

升级了一个依赖,项目突然跑不起来,不知道是哪个。

学会之后

看版本号就知道这次升级大不大、有没有可能不兼容。

  • 发布自己的扩展、插件时按规则写版本
  • 看懂 package.json 里的 ^ 和 ~

02图解

公式图
主版本1.次版本2.修订号3=1.2.3
三个数字,升哪个取决于改动的性质。

03基本单元5 个

  • 主版本 MAJOR不兼容的改动
  • 次版本 MINOR向后兼容的新功能
  • 修订号 PATCH向后兼容的修 bug
  • ^允许升次版本和修订号
  • ~只允许升修订号

04怎么用

  1. 不兼容的改动升主版本,新增功能升次版本,修 bug 升修订号
  2. ^1.2.3 允许升到任何 1.x.x(不超过 2.0.0)
  3. ~1.2.3 只允许升到 1.2.x
  4. 主版本 0(0.x.y)表示不稳定,次版本变化也可能不兼容

05速查表

写法含义例子
1.2.3精确版本只用 1.2.3
^1.2.3同一主版本内最新1.2.3 ≤ v < 2.0.0
~1.2.3同一次版本内最新1.2.3 ≤ v < 1.3.0
2.0.0-beta.1预发布版本还不稳定

06动手试试

版本升级模拟

07套用一次

浏览器扩展新增一个设置页(兼容):1.4.2 → 1.5.0;修复一个崩溃:1.5.0 → 1.5.1;改了配置格式:1.5.1 → 2.0.0。

08常见的坑

  • 随便升版本号

    按规则升,使用者才能通过数字判断风险。

  • 锁定太死

    用 ^ 能自动拿到安全修复,同时避开不兼容升级。

09自测与练习

先做 10 秒自测,再动手练一下。

修复了一个 bug,版本从 1.4.2 变成?

10 分钟小练习

看你项目的 package.json,找出三个依赖,用演示器判断它们的 ^ 范围。

看参考答案
注意主版本升级时要读更新说明。

+配合着学

代码与技术常识的全部 10 条