跳到主要内容

版本号比较

语义化版本号比较与校验

1.10.0 更新

遵循 Semantic Versioning 2.0.0:比较 主.次.修,再比预发布标签(正式版 > 预发布;预发布按 数字/字典序)。本地计算。

为什么需要版本号比较

依赖升级、发版、写 ^/~ 范围时,经常要判断「1.2.0 比 1.10.0 新还是旧」。人眼容易被小数点骗——1.10.0 实际比 1.2.0 新,但按字符串排会反过来。语义化版本(SemVer)有明确的比较规则,本工具帮你不靠肉眼做对。

本工具比较两个版本号,输出「A 更新 / B 更新 / 相等」,并遵循 SemVer 2.0.0 的预发布标签规则。

概念与公式

SemVer 格式:主版本号.次版本号.修订号-预发布标签+构建元数据,例如 2.13.0-rc.1+build5

比较优先级(核心规则):

  1. 先比 主 → 次 → 修订 三个数字(按数值,不是字符串);
  2. 数字相同再看预发布标签:有预发布的版本低于同号的正式版1.0.0-rc.1 < 1.0.0);
  3. 预发布标签之间按点分段比较,数字段按数值、非数字段按 ASCII;
  4. 构建元数据(+xxx不参与优先级比较。

公式化:compare(A,B) 返回 -1 / 0 / 1。

细分场景

  • 升级决策:确认新版本是否真的新于当前。
  • 范围校验:验证 >=1.2.0 <2.0.0 是否覆盖某版本。
  • 发布排序:把一堆 tag 按正确顺序排。

怎么用本工具

在两个输入框分别填版本号 A、B,结果即时显示关系(含逐项拆解:主/次/修/预发布)。支持带预发布标签和构建元数据的完整写法。

常见场景与实例

例:数字陷阱 1.2.0 vs 1.10.0 → B 更新(10 > 2,数值比较而非字符串)。

例:预发布 1.0.0-rc.1 vs 1.0.0 → B 更新(预发布低于正式版)。

相关工具:提交信息生成变更日志生成

隐私说明

全程浏览器本地计算,不联网、不上传你输入的版本号。

常见问题

语义化版本长什么样?
主版本.次版本.修订号,如 2.3.1;可带预发 -alpha.1 和构建元数据 +20230901。主版本不兼容、次版本新增向后兼容、修订号修复向后兼容。
预发版本怎么比大小?
正式版大于预发版(2.0.0 > 2.0.0-rc.1);同为预发时按标识符逐段比(alpha < beta < rc)。构建元数据(+xxx)不参与比较。
^1.2.3 和 ~1.2.3 是什么意思?
^ 允许修订和次版本升级(锁主版本),~ 只允许修订升级(锁主.次)。这是 npm 等包管理器的范围语法;本工具比较的是具体版本号本身。
非法版本号会提示吗?
会。缺段、出现非数字主版本、格式错乱等都会被标为「非法 semver」,并说明原因。