简易笔记:NPM 语义化版本号规则

582 阅读2分钟

npm 语义化版本号规则

npm 采用语义版本管理软件包,所谓语义版本就是指版本号为 MAJOR.MINOR.PATCH 的形式,一个软件发布的时候默认就是 1.0.0 版本。

我们以 1.15.2 为例:

  1. 其中1是 marjor version(主要版本号),这个版本号变化了表示有了一个不可以和上个版本兼容的大更改,破坏了向后兼容性;

  2. 其中15是 minor version(小版本号),这个版本号变化了表示增加了新的功能,并且向后兼容不影响原有的功能;

  3. 其中2是 patch version(补丁版本号),这个版本号变化了表示修复了相关bug,给程序打补丁,并且可以向后兼容。

node 项目中 package.json 文件中的 dependenciesdevDependencies 字段表示当前项目所需的依赖包及其版本号。

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

还可以使用替代符号Xx*,或者省略某个部分:

\*

即 >=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