Semantic Versioning 直译为语义化版本,格式为 MAJOR.MINOR.PATCH,比如 1.2.3 代表第一主版本第二次版本第三补丁修正版,版本号唯一且可比较,更多信息参考官网介绍。

在 Node.js package.json 或 Bower bower.json 就是用 semver 做版本检查。记个笔记,假设当前最新版是 1.2.5:

  • 1.2.3 明确指定版本,需完全匹配,安装的版本就是 1.2.3.
  • >1.2.3 大于指定版本,匹配符合条件的最新版 1.2.5.
  • <1.2.3 小于指定版本,匹配符合条件的最新版 1.2.2.
  • <=1.2.3 可以包括补丁修正测试版,比如 1.2.3-beta,
  • 1.2.3 - 2.3.4 等同于 >=1.2.3 <=2.3.4.
  • ~1.2.3 接近于 1.2.3 的版本,等同于 >=1.2.3-0 <1.3.0-0,也就是相同主版本,相同次版本,补丁修正大于等于所需版本均符合。这种情况是实际使用中最多的,保持最大的兼容性.
  • ~1.2 等同于 >=1.2.0-0 <1.3.0-0,相同主版本、相同次版本均符合,等于 1.2.x
  • ~1 等同于 >=1.0.0-0 <2.0.0-0,相同主版本均可,等于 1.x.
  • * 任意版本,会匹配当前可用的最新版 1.2.5.
  • 1.2.3 || 1.3.2 哪个满足取哪个,如果两者均符合取第二个。

主要就是 ~ 匹配的使用,一般就用 ~1.2.3,保持次版本内最新,又保持最大兼容性。

参考 semver for npmpackage.json.