之前就觉得为什么 github 上的大部分东西都是 1.0.1、1.11.1 甚至 0.11.1 这种奇葩的版本。为什么 jQuery 1.9.9 之后不是 2.0.0 而是 1.10.0。而且在 npm init
的时候不能输入 1 或 1.0 这样的版本,就算你手动修改了 package.json 里的版本之后,就无法安装其他模块,报 Invalid version: "1.0"
无效版本错误。
相信这些问题不仅仅只有我疑问过吧。今天学习 node 模块源码的时候,翻到了个 semver 模块,看到了对于版本的处理,然后找到了《语义化版本 2.0.0》官方文档。
语义化版本
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
- 主版本号:当你做了不兼容的 API 修改,
- 次版本号:当你做了向下兼容的功能性新增,
- 修订号:当你做了向下兼容的问题修正。
先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
这些都来至官方解释,详情就直接阅读《语义化版本 2.0.0》官方文档吧。文档里说有详细介绍了 SemVer 的规范,以及为什么这样做,什么情况用什么版本,还有常见的疑问,甚至你可以到GitHub 上提出您的问题。
都大一统吧
我之前一直都是 1.0,1.1,这样命名的,npm 下没办法才用 1.0.0。现在知道为什么了,突然感觉我之前好蠢。 如果大家都遵循这个规范后,看一眼就知道这次更新大概是做了什么调整了,是加了新东西,还是修复bug,还是完全不兼容的重构。用户就知道这次的东西是能直接升级的,还是需要修改自己的代码才能升级的。
希望和我一样不知道的朋友,赶紧都规范起来吧。