实用工具
输入
结果
结果会显示在这里。^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 版本范围
- ^ 和 ~ 的区别
- 语义化版本
- 版本号比较