开发辅助

SemVer 版本比较

严格校验、比较和排序 Semantic Versioning 2.0.0 版本号

SemVer 2.0.0
严格校验并比较主版本、次版本、修订号和预发布标识
版本 B 更新
版本MajorMinorPatchPrereleaseBuild
1.8.0-beta.2180beta.2
1.8.0180
版本列表排序
每行一个版本,无效版本不会进入结果
排序结果
2.0.0 2.0.0-rc.1 1.8.0 1.8.0-beta.2 1.7.12

SemVer 版本比较

按照 Semantic Versioning 2.0.0 规则严格校验、比较和排序版本号,包括预发布标识的数字与字母优先级。

比较规则

  • 依次比较 major、minor 和 patch
  • 正式版本优先级高于相同核心版本的预发布版本
  • 构建元数据不参与优先级比较

常见问题

semver 里 ^ 和 ~ 有什么区别?
~1.2.3 允许补丁位变化(>=1.2.3 <1.3.0);^1.2.3 允许次版本及以下变化(>=1.2.3 <2.0.0)。对 0.x 版本,^0.2.3 只允许补丁变化——0.x 阶段次版本即破坏性变更。npm 默认保存 ^。
预发布版本(1.0.0-beta.1)和正式版谁大?
正式版 1.0.0 大于一切 1.0.0-x 预发布;预发布标识按字典序比较(alpha < beta < rc)。构建元数据(+build.1)不参与优先级比较——1.0.0+a 与 1.0.0+b 相等,这是判断"是否需要重新发包"的常见误区。
什么时候该升 major 版本?
任何对现有使用者造成破坏的变更:删除或改签名的导出、行为变更、最低环境要求提升。纠结"这算不算破坏"时倾向于算——semver 的价值在于让依赖方信任升级,误升 minor 的代价远高于多升一次 major。