3. Versions of dependencies(依赖的版本)
3.版本的依赖关系
语义版本
Yarn中的包遵循语义版本控制,也称为“semver”。当你从注册表安装一个新的软件包时,它会被添加到你package.json
的一个semver版本范围。
这些版本被分解成major.minor.patch
,看上去就像其中的一个:3.14.1
,0.42.0
,2.7.18
。版本的每个部分在不同的时间递增:
- 当您对软件包的API 进行
中断
或不兼容的
更改时会增加major
。
- Increment
minor
when you addnew functionality
while stayingbackwards-compatible
- 增量
patch
当你做出错误修复
,同时保持向后兼容
注意:
有时候也有标签或扩展名,用于标记预发行版或者测试版等格式(例如2.0.0-beta.3
)
当开发人员谈论两个彼此“兼容”的semver版本时,他们指的是向后兼容的
更改(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 | Any version that is less than 2.0.0 |
<=3.1.4 | Any version that is less than or equal to 3.1.4 |
0.4.2 | Any version that is greater than 0.4.2 |
=2.7.1 | Any version that is greater than or equal to 2.7.1 |
=4.6.6 | Any version that is equal to 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-Ranges
任何的X
,x
或者*
可以用离开的部分或全部未指定的一个版本。
版本范围 | 扩展版本范围 |
---|---|
* | =0.0.0 (any version) |
2.x | =2.0.0 <3.0.0 (match major version) |
3.1.x | =3.1.0 <3.2.0 (match major and minor version) |
如果版本的一部分被忽略,则认为它是一个x范围。
版本范围 | 扩展版本范围 |
---|---|
(empty string) | * or >=0.0.0 |
2 | 2.x.x or >=2.0.0 <3.0.0 |
3.1 | 3.1.x or >=3.1.0 <3.2.0 |
Tilde Ranges
使用~
指定的次要版本允许patch
更改。仅使用指~
定的主要版本将允许minor
更改。
版本范围 | 扩展版本范围 |
---|---|
~3.1.4 | =3.1.4 <3.2.0 |
~3.1 | 3.1.x or >=3.1.0 <3.2.0 |
~3 | 3.x or >=3.0.0 <4.0.0 |
注意:
在tilde ranges中指定预发布只会匹配该同一完整版本中的预发布。例如,版本范围~3.1.4-beta.2
可以匹配,3.1.4-beta.4
但不是3.1.5-beta.2
因为major.minor.patch
版本不同。
Caret Ranges
允许修改不修改版本中的第一个非零数字,即3
in 3.1.4
或4
in 0.4.2
。
版本范围 | 扩展版本范围 |
---|---|
^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计算器在实际包上测试这个版本控制系统。