在持续集成的过程中,package的版本有着复杂而灵活的表达,比如:^1.2.3
,~1.2.3
,>=1.2.3
等。Yarn对版本的理解即语义化版本。
版本数字的意义
版本数字的格式:major.minor.patch
也就是说,你所看到的版本数字,有三部分组成:
- major:主版本。有重大变化。
- minor:小版本。有功能上的变化。
- patch:发布包。修正了一些错误。
Yarn的版本操作概念
先说容易理解的。版本号前面的符号叫做operator
,是用来操作版本号的。在它的操作下,可用版本可能是一个,也可能是多个。一个或多个operator
加上version number
就构成了comparator
。这个东西能够用来表达一个version range
。不同的comparator
存在下列不同的表达。
类似于,下面这些情况:
- >=1.2.3:大于等于1.2.3的版本都可以用。
- <=4.5.6:小于等于4.5.6的版本都可以用。
- =1.2.3:只能使用1.2.3的版本。
简单说就是,可用版本号落在一个连续的范围内。你可以想象一下数轴上的数字区间。
- >1.2.3 <=4.5.6:大于1.2.3的版本,不包括1.2.3,且小于等于4.5.6的版本都是可用版本。
Yarn的版本操作符
- >, <, >=, <=
- ^
- ~
但是,有个地方要强调下。Yarn还支持这种操作:
- >=1.2.3 || < 1.2.0
这表示两个版本数字集合的合并集。另外,关于Pre-release
的版本,Yarn的考虑也颇有心计:
- >=1.2.3-beta.2
这个表示为大于等1.2.3-beta.2的版本都是可用的。但是,有个前提:1.2.3-beta保持不变。什么意思?就是说,major.minor.patch这个结构上的数字不做变动,而仅仅变化beta
版本的数字。比如:
- 1.2.3-beta.3
这个也是可用的。而下面这个则不可用:
- 1.2.4-beta.3
Yarn如何表达版本范围
version range
在Yarn的版本管理中用的非常频繁。除了可以用comparator
来确定版本范围以外,还有以下几种方式:
使用
- Hyphen
(短线)连接两个版本数字以表达版本范围。- 1.2.3 - 4.5.6
这个表示,只要版本在1.2.3到4.5.6之间,都是可用的版本。需要强调的是,两个断点的版本都是包含的。也即,1.2.3和4.5.6都是适用的。
- 1.2.3 - 4.5.6
使用
X or x
(字母x)表示某个版本数字的全部。- 1.2.*
这个表示,只要是major.minor的版本数字正确,patch
的数字可以使任意的。
- 1.2.*
使用
* wildcard
(星号)表示任意版本。- *
Any version
- *
使用
~ tilde
(波浪号)表示某个可以被替代的版本数字结构。- ~1.2.3
这个表示,版本数字大于等于1.2.3且小于1.3.0的版本,都是适用的。类似于,>=1.2.3 <1.3.0
- ~1.2
这个表示,版本数字大于等于1.2.0且小于1.3.0的版本, 都是适用的。类似于,1.2.x
- ~1
这个表示,版本数字大于等1.0.0且小于2.0.0的版本,都是适用的。类似于,1.x
或者>=1.0.0 <2.0.0
- ~1.2.3
使用
^ caret
(尖角号)表示版本数字结构中的第一个非零
数字是不可变的,其它都可以变化。- ^1.2.3
这个表示,大于等于1.0.0的版本都是适用版本。类似于,1.x
- ^0.1.2
这个表示,大于等于0.1.2且小于0.2.0的版本,都是适用版本。类似于,>=0.1.2 <0.2.0
- ^0.0.1
这个表示,大于等于0.0.1且小于0.0.2的版本,都是适用版本。类似于,>=0.0.1 <0.0.2
- ^1.2.3