重要信息:本文档介绍的是 Yarn 1(经典版)。
有关 Yarn 2+ 文档和迁移指南,请参阅yarnpkg包网站。

依赖版本

语义化版本控制

Yarn 中的包遵循 语义化版本控制,也称为“语义版本”。当您从注册表安装新包时,该包会以语义版本范围的形式添加到 package.json 中。

这些版本分为 major.minor.patch,如下所示:3.14.10.42.02.7.18。版本的每个部分会在不同时间递增

  • 当您对包的 API 进行了破坏性不兼容更改时,递增 major
  • 当您添加新功能且仍保持向后兼容时,递增 minor
  • 当您进行错误修复且仍保持向后兼容时,递增 patch

注意:语义版本格式有时还有“标签”或“扩展”,用于标记预发行版或测试版(例如 2.0.0-beta.3

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

版本范围

当您想指定依赖项时,您可以在 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.23.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 范围

Xx* 中的任何一个都可以用来保留版本的一部分或全部而不指定。

版本范围 展开的版本范围
* >=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

更多资源