实用工具

Semver 版本范围检查器

看看 ^1.2.0、~2.3 这样的范围接受哪些版本——用 npm 自己的 node-semver,预发布版本也算在内。

浏览器本地运行代码转换5466
免费

输入

0 B

结果

结果会显示在这里。

^1.2.0 是否接受 1.10.0-beta.1,^0.2.3 允许哪些版本,这些问题很容易猜错,又不方便测试。粘贴一组版本号和一个范围,这个工具就用 node-semver(npm 解析依赖所用的库)逐个标出接受还是拒绝。它还会正确排序——1.10.0 排在 1.2.0 之后,预发布版本排在正式版之前——展示范围的完整写法,并给出满足范围的最高和最低版本。

它是怎么工作的

  • 版本号可以用逗号、空格或换行分隔;latest 这类不合法的版本会单独列出,而不是悄悄忽略。
  • 范围会以展开形式显示——^1.2.0 即 >=1.2.0 <2.0.0-0——这才是 node-semver 实际比较的内容。
  • 除非你允许,预发布版本默认不计入,与 npm 一致:默认情况下 ^1.2.0 不接受 1.10.0-beta.1。
  • 会算出最高版本的下一个 patch、minor、major 和 rc 预发布版本;恰好输入两个版本时,还会显示两者的差异级别(major、minor、patch…)。

你的数据去了哪里

哪也没去。本工具完全在你的浏览器里运行:你粘贴的文本由页面处理,不会传输到任何服务器,也不会写进任何日志。

本工具免费且无需登录,运行结果只存在于你当前的页面里,不会被保存到任何地方。

它要花多少

本工具完全免费,不需要登录,也不消耗积分。

常见问题

^ 和 ~ 有什么区别?
^ 允许不改变最左边非零数字的所有更新:^1.2.3 接受到 2.0.0 之前的版本。~ 在指定了 minor 时只允许 patch 更新:~1.2.3 接受到 1.3.0 之前的版本。npm 默认往 package.json 里写的是 ^。
为什么 ^0.2.3 不接受 0.3.0?
因为对 0.x 版本来说,minor 位被当作破坏性变更:1.0.0 之前,语义化版本不做任何稳定性承诺,所以 ^0.2.3 表示 >=0.2.3 <0.3.0。同理,^0.0.3 只接受 0.0.3 本身。
为什么 ^1.2.0 拒绝 1.10.0-beta.1?
npm 不让预发布版本进入范围,除非范围本身写明了同一 major.minor.patch 的预发布版本,这样可以避免意外装上 beta 版。打开「包含预发布版本」,可以看到允许预发布时范围会接受什么,相当于 npm 的 --include-prerelease。
宽松模式有什么用?
它接受严格 semver 不认的不规范版本号,比如 =1.2.3beta,并显示读成了什么——这里是 1.2.3-beta。一些老包和标签会用这种写法;严格模式才是规范允许的格式。

背后的开源项目

本工具运行在 npm/node-semver 之上,以 ISC 许可发布。如果你需要在自己的程序里实现同样的能力,直接用这个库。

npm/node-semver

也常被称作

  • semver 检查
  • semver 范围计算
  • npm 版本范围
  • ^ 和 ~ 的区别
  • 语义化版本
  • 版本号比较