祈灵工具箱

📦SemVer 语义化版本工具 - npm 版本范围检查、比较排序、版本递增

package.json 里的 ^1.2.3、~0.4、>=2 <3 || 4.x 到底会装上哪些版本?把范围粘贴进来,工具按 npm 使用的 node-semver 规则逐项“脱糖”成基本比较器(例如 ^1.2.3 → >=1.2.3 <2.0.0-0),用大白话说明含义,并提示预发布版本的特殊规则:默认只有范围里写了同一 major.minor.patch 的预发布标签时,2.0.0-beta.1 这样的版本才会匹配。可以测试单个版本,也可以粘贴一整串版本(例如 npm view 包名 versions 的输出),一眼看出哪些满足,得到满足范围的最高、最低版本以及范围允许的最低版本(minVersion)。另外三个页签分别用来解析校验版本号(指出前导零、空标识符等不合法原因)、比较两个版本并对一组版本排序(遵循 SemVer 优先级,1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta < 1.0.0),以及按 npm version 的规则一次算出 major、minor、patch、premajor、preminor、prepatch、prerelease 的递增结果。计算结果与 node-semver 7 逐项对照测试过。

免费 · 无需注册 · 浏览器本地处理最后更新:

正在加载工具...

如何使用语义化版本工具

  1. 1在“范围检查”中输入 npm 版本范围,查看脱糖后的比较器和含义
  2. 2输入单个版本或粘贴版本列表,查看哪些满足及最高 / 最低满足版本
  3. 3切换到解析校验、比较排序或版本递增页签处理具体版本号

常见问题

^ 和 ~ 有什么区别?
^ 允许不改变最左边非零位的更新:^1.2.3 等于 >=1.2.3 <2.0.0,可以升级次版本和修订号;但在 0.x 阶段更保守,^0.2.3 只到 <0.3.0,^0.0.3 只允许 0.0.3。~ 只允许修订号更新:~1.2.3 等于 >=1.2.3 <1.3.0,~1 等于 >=1.0.0 <2.0.0。
为什么 2.0.0-beta.1 不满足 >=1.0.0?
这是 npm 的预发布规则:预发布版本通常不稳定,所以只有当范围里某个比较器本身就带预发布标签、并且 major.minor.patch 相同(例如 >=2.0.0-alpha),同一版本号的其它预发布版才会匹配。如果确实希望把预发布版本都算进来,可以勾选“包含预发布版本”(对应 node-semver 的 includePrerelease 选项)。
脱糖结果里的 <2.0.0-0 是什么意思?
-0 是最小的预发布标签,<2.0.0-0 表示比 2.0.0 的所有预发布版本都小,也就是排除了 2.0.0-alpha 之类的版本。node-semver 用这种写法保证 ^1.2.3 不会意外匹配到下一个大版本的预发布版。
版本号比较时,构建元数据会影响结果吗?
不会。按 SemVer 2.0.0,+ 后面的构建元数据(例如 1.0.0+20240101)不参与优先级比较,1.0.0+a 和 1.0.0+b 被视为同一版本。排序时为了结果稳定,本工具在主版本相同的情况下再按构建元数据排列,与 semver.compareBuild 一致。