npm 语义化版本号规则
npm 采用语义版本管理软件包,所谓语义版本就是指版本号为 MAJOR.MINOR.PATCH
的形式,一个软件发布的时候默认就是 1.0.0
版本。
我们以 1.15.2
为例:
-
其中1是
marjor version
(主要版本号),这个版本号变化了表示有了一个不可以和上个版本兼容的大更改,破坏了向后兼容性; -
其中15是
minor version
(小版本号),这个版本号变化了表示增加了新的功能,并且向后兼容不影响原有的功能; -
其中2是
patch version
(补丁版本号),这个版本号变化了表示修复了相关bug,给程序打补丁,并且可以向后兼容。
node 项目中 package.json 文件中的 dependencies
和 devDependencies
字段表示当前项目所需的依赖包及其版本号。
npm 依赖包的版本号,允许使用特殊符号指定所要使用的版本范围
波浪符号(~
)会匹配最新的补丁版本依赖包,比如 ~1.2.3
会匹配所有 1.2.x
版本,但是不包括 1.3.0
。
插入符号(^
) 会匹配最新的小版本依赖包,比如 ^1.2.3
会匹配所有 1.x.x
的包,包括 1.3.0
,但是不包括 2.0.0
。
当我们使用最新的Node运行 npm install --save xxx
的时候,它会优先考虑使用插入符号(^
)而不是波浪符号(~
)。
波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。
网上相关博文都推荐使用 ~
,是因为只会更新依赖包的补丁版本,比较稳定。
而使用 ^
,有的小版本更新后会引入新的问题导致项目不稳定。
除此之外,还可以使用数学运算符
比如:>
>=
<
<=
-
||
等,指定版本范围(多个运算之间空格):
> 2.1
匹配2.2.0、2.2.1、2.3.0,不匹配2.1.0、2.0.0
>= 1.2.7 < 1.3.0
匹配1.2.7、 1.2.8 、1.2.9,不匹配1.2.6、 1.3.0
1.2.7 || >= 1.2.9 < 2.0.0
匹配1.2.7、 1.2.9、 1.3.0,不匹配1.2.8、 2.0.0
1.2.3 - 2.3.4
即 >= 1.2.3 <= 2.3.4
还可以使用替代符号X
、x
、*
,或者省略某个部分:
\*
即 >=0.0.0 (任意版本)
1.x
即 >=1.0.0 <2.0.0
1.2.x
即 >=1.2.0 <1.3.0
1
即 1.x.x ,等同于 >=1.1.0 <2.0.0
1.2
即 1.2.x ,等同于>=1.2.0 <1.3.0
更多内容请参见官方文档: docs.npmjs.com/misc/semver