3. Versions of dependencies(依赖的版本)

3.版本的依赖关系

语义版本

Yarn中的包遵循语义版本控制,也称为“semver”。当你从注册表安装一个新的软件包时,它会被添加到你package.json的一个semver版本范围。

这些版本被分解成major.minor.patch,看上去就像其中的一个:3.14.10.42.02.7.18。版本的每个部分在不同的时间递增:

  • 当您对软件包的API 进行中断不兼容的更改时会增加major

  • Increment minor when you add new functionality while staying backwards-compatible

  • 增量patch当你做出错误修复,同时保持向后兼容

注意:有时候也有标签或扩展名,用于标记预发行版或者测试版等格式(例如2.0.0-beta.3

当开发人员谈论两个彼此“兼容”的semver版本时,他们指的是向后兼容的更改(minorpatch)。

版本范围

像这些中一个,如果要指定一个依赖你指定其名称和版本范围在你的package.json

{ "dependencies": { "package-1": ">=2.0.0 <3.1.4", "package-2": "^0.4.2", "package-3": "~2.7.1" } }

您会注意到我们有一些与版本不同的字符。这些字符,>=,<,^,和~,是操作者,他们都用于指定版本范围。

版本范围的目的是指定哪些版本的依赖项适用于您的代码。

比较

每个版本范围都由比较器组成。这些比较器只是一个操作符,后跟一个版本。以下是一些基本的操作员:

比较描述
<2.0.0Any version that is less than 2.0.0
<=3.1.4Any version that is less than or equal to 3.1.4
0.4.2Any version that is greater than 0.4.2
=2.7.1Any version that is greater than or equal to 2.7.1
=4.6.6Any 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.42),那么它们用零填充。

版本范围扩展版本范围
2.0.0 - 3.1.4=2.0.0 <=3.1.4
0.4 - 2=0.4.0 <=2.0.0

X-Ranges

任何的Xx或者*可以用离开的部分或全部未指定的一个版本。

版本范围扩展版本范围
*=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
22.x.x or >=2.0.0 <3.0.0
3.13.1.x or >=3.1.0 <3.2.0

Tilde Ranges

使用~指定的次要版本允许patch更改。仅使用指~定的主要版本将允许minor更改。

版本范围 扩展版本范围
~3.1.4=3.1.4 <3.2.0
~3.13.1.x or >=3.1.0 <3.2.0
~33.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

允许修改不修改版本中的第一个非零数字,即3in 3.1.44in 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自述文件。