依赖版本
语义化版本控制
Yarn 中的包遵循 语义化版本控制,也称为“语义版本”。当您从注册表安装新包时,该包会以语义版本范围的形式添加到 package.json
中。
这些版本分为 major.minor.patch
,如下所示:3.14.1
、0.42.0
和 2.7.18
。版本的每个部分会在不同时间递增
- 当您对包的 API 进行了破坏性或不兼容更改时,递增
major
。 - 当您添加新功能且仍保持向后兼容时,递增
minor
。 - 当您进行错误修复且仍保持向后兼容时,递增
patch
。
注意:语义版本格式有时还有“标签”或“扩展”,用于标记预发行版或测试版(例如
2.0.0-beta.3
)
当开发者谈论两个语义版本彼此“兼容”时,他们指的是向后兼容的更改(minor
和 patch
)。
版本范围
当您想指定依赖项时,您可以在 package.json
中指定其名称和版本范围,如下所示
{
"dependencies": {
"package-1": ">=2.0.0 <3.1.4",
"package-2": "^0.4.2",
"package-3": "~2.7.1"
}
}
您会注意到有很多字符与版本分开。这些字符,>=
、<
、^
和 ~
,是运算符,用于指定版本范围。
版本范围的目的是指定哪些版本的依赖项对您的代码有效。
比较器
每个版本范围都由比较器组成。这些比较器只是运算符后跟版本。以下是一些基本运算符
比较器 | 描述 |
---|---|
<2.0.0 |
小于 2.0.0 的任何版本 |
<=3.1.4 |
小于或等于 3.1.4 的任何版本 |
>0.4.2 |
大于 0.4.2 的任何版本 |
>=2.7.1 |
大于或等于 2.7.1 的任何版本 |
=4.6.6 |
等于 4.6.6 的任何版本 |
注意:如果未指定运算符,则在版本范围内假定
=
。因此,=
运算符实际上是可选的。
相交
比较器可以用空格连接起来创建比较器集合。这将创建其包含的比较器的交集。例如,比较器集合 >=2.0.0 <3.1.4
表示 “大于或等于 2.0.0
且小于 3.1.4
“。
联合
完整版本范围可以包括由 ||
连接在一起的多个比较器集合的联合。如果联合的任一侧满足,则整个版本范围将得到满足。例如,版本范围 <2.0.0 || >3.1.4
表示 “小于 2.0.0
或大于 3.1.4
“。
预发布标签
版本还可以具有预发布标签(例如 3.1.4-beta.2
)。如果比较器包含带有预发布标签的版本,它将仅与具有相同 major.minor.patch
版本的版本匹配。
例如,范围 >=3.1.4-beta.2
将匹配 3.1.4-beta.2
或 3.1.4-beta.12
,但不会匹配 3.1.5-beta.1
,即使从技术上讲它“大于或等于” (>=
) 版本 3.1.4-beta.2
。
预发布版本往往包含意外的重大更改,而通常你不希望在已指定版本之外匹配预发布版本,所以这种行为是有用的。
高级版本范围
连字符范围
连字符范围(例如 2.0.0 - 3.1.4
)指定一个包含的集合。如果版本的一部分被省略(例如 0.4
或 2
),则会用零填充它们。
版本范围 | 展开的版本范围 |
---|---|
2.0.0 - 3.1.4 |
>=2.0.0 <=3.1.4 |
0.4 - 2 |
>=0.4.0 <=2.0.0 |
X 范围
X
、x
或 *
中的任何一个都可以用来保留版本的一部分或全部而不指定。
版本范围 | 展开的版本范围 |
---|---|
* |
>=0.0.0 (任何版本) |
2.x |
>=2.0.0 <3.0.0 (匹配主要版本) |
3.1.x |
>=3.1.0 <3.2.0 (匹配主要版本和次要版本) |
如果版本的一部分被省略,则假定它是一个 x 范围。
版本范围 | 展开的版本范围 |
---|---|
``(空字符串) | * 或 >=0.0.0 |
2 |
2.x.x 或 >=2.0.0 <3.0.0 |
3.1 |
3.1.x 或 >=3.1.0 <3.2.0 |
波浪号范围
使用 ~
并指定次要版本允许 补丁
更改。仅使用主要版本指定 ~
将允许 次要
更改。
版本范围 | 展开的版本范围 |
---|---|
~3.1.4 |
>=3.1.4 <3.2.0 |
~3.1 |
3.1.x 或 >=3.1.0 <3.2.0 |
~3 |
3.x 或 >=3.0.0 <4.0.0 |
注意:在波浪号范围中指定预发布版本将仅匹配完整版本中的预发布版本。例如,版本范围
~3.1.4-beta.2
将匹配3.1.4-beta.4
但不匹配3.1.5-beta.2
,因为major.minor.patch
版本不同。
脱字符号范围
允许不修改版本中第一个非零数字的更改,无论是 3.1.4
中的 3
还是 0.4.2
中的 4
。
版本范围 | 展开的版本范围 |
---|---|
^3.1.4 |
>=3.1.4 <4.0.0 |
^0.4.2 |
>=0.4.2 <0.5.0 |
^0.0.2 |
>=0.0.2 <0.0.3 |
注意:默认情况下,当你运行
yarn add [package-name]
时,它会使用插入符号范围。
如果版本的一部分被省略了,则缺失的部分将用零填充。然而,它们仍将允许更改该值。
版本范围 | 展开的版本范围 |
---|---|
^0.0.x |
>=0.0.0 <0.1.0 |
^0.0 |
>=0.0.0 <0.1.0 |
^0.x |
>=0.0.0 <1.0.0 |
^0 |
>=0.0.0 <1.0.0 |
更多资源
- 有关此版本控制系统如何工作的完整说明,请参阅
node-semver
自述文件。 - 使用 npm semver 计算器在实际包上测试此版本控制系统。