版本依赖规范
Armory 提供强大的软件包依赖管理功能,支持在 armory.json
配置文件中指定依赖包的具体版本或版本区间,简化包管理并提升灵活性。配置版本区间时,需遵循版本号范围语法,同时版本号应符合 版本号规范。
版本范围解析策略
为了确保依赖库的稳定性,若依赖包配置了版本区间,则 Armory 会自动解析并选择满足条件的最新版本。
版本范围语法规范
版本范围是由一组比较符组成,用来指定符合条件的版本。常用的比较符包括:
<
: 小于<=
: 小于或等于>
: 大于>=
: 大于或等于=
: 等于。若未指定运算符,则默认假定为等于。
多个比较符可以通过空格连接成一个比较符集。一个版本范围由一个或多个比较符集构成,这些比较符集通过 ||
连接。只有当版本至少满足一个 ||
分隔的比较符集中的所有条件符时,才会匹配该范围。例如:
- 范围
>=1.2.7 <1.3.0
会匹配版本1.2.7
、1.2.8
和1.2.9
,但不会匹配版本1.2.6
、1.3.0
或1.1.0
。 - 范围
1.2.7 || >=1.2.9 <2.0.0
会匹配版本1.2.7
、1.2.9
和1.4.6
,但不会匹配版本1.2.8
或2.0.0
。
高级范围语法提供了更加灵活的版本匹配方式,能够以确定的方式解耦原始比较符集。同时,高级语法可以与使用空格或 ||
的比较符集结合使用,提供更多组合匹配选项。下面介绍常用的高级范围语法:
X.Y.Z - A.B.C
连字符范围 该语法用于指定一个包含的版本范围。例如 1.2.3 - 2.3.4
等价于 >=1.2.3 <=2.3.4
。它包括以下几种种特殊情况:
- 如果左区间版本号不完整,缺失的部分会自动补充为零。例如,
1.2 - 2.3.4
等价于>=1.2.0 <=2.3.4
。 - 如果右区间版本号不完整,则匹配从提供部分开始的所有版本,但不包括更大的版本。例如
1.2.3 - 2.3
等价于>=1.2.3 <2.4.0-0
,1.2.3 - 2
等价于>=1.2.3 <3.0.0-0
。 - 构建版本号可以作为正常的版本号进行匹配。例如版本范围
>=1.2.3
可以匹配>=1.2.3+20241202
。
1.2.X
1.X
1.2.**
X 范围 X 范围可以使用 X
、x
或 *
来代表主版本号、次版本号或修订号中的任意一位数字。注意:该语法只匹配数字版本号,不包括预发布版本号(如 1.0.0-alpha
)。 以下是常见的语法:
*
等价于>=0.0.0
(匹配任何非预发布版本)1.x
等价于>=1.0.0 <2.0.0-0
(匹配主版本号为 1 的版本)1.2.x
等价于>=1.2.0 <1.3.0-0
(匹配主版本号为 1 且次版本号为 2 的版本)
另外,部分简化版本也被视为 X 范围,可以省略特殊字符:
""
(空字符串)等价于*
,即>=0.0.0
1
等价于1.x.x
,即>=1.0.0 <2.0.0-0
1.2
等价于1.2.x
,即>=1.2.0 <1.3.0-0
~1.2.3
~1.2
~1
波浪号范围 使用 ~
表示版本范围,其规则为:
- 如果指定了次版本号,则允许修订号级别的更新。
- 如果没有指定次版本号,则允许次版本号级别的更新。
以下是一些常见示例:
~1.2.3
等价于>=1.2.3 <1.3.0-0
(允许修订号更新)~1.2
等价于>=1.2.0 <1.3.0-0
(与1.2.x
相同)~1
等价于>=1.0.0 <2.0.0-0
(与1.x
相同)~0.2.3
等价于>=0.2.3 <0.3.0-0
~0.2
等价于>=0.2.0 <0.3.0-0
(与0.2.x
相同)~0
等价于>=0.0.0 <1.0.0-0
(与0.x
相同)
对于预发布版本(如 ~1.2.3-beta.2
),允许版本号范围内的较高预发布版本,例如 1.2.3-beta.4
是允许的,但但跨越主版本号、次版本号或修订号的更新(如 1.2.4-beta.2
) 不被允许。
^1.2.3
^0.2.5
^0.0.4
插入符号范围 插入符号(^
)用于指定允许范围内的版本更新规则,确保更新不会修改最左边的非零元素(即主版本号、次版本号或修订号)。插入符号范围适用于需要兼顾功能稳定性和小幅更新的场景。其更新规则如下:
- 主版本号 ≥ 1(如
1.0.0
及以上):允许更新次版本号和修订号。 - 主版本号为 0,次版本号 ≥ 1(如
0.X >=0.1.0
):只允许更新修订号。 - 主版本号和次版本号均为 0(如
0.0.X
):不允许更新。
使用场景:插入符号范围允许在指定版本范围内自动更新到最新的修订号或次版本号,而不改变主版本号,确保兼容性。例如:
^1.2.3
等价于>=1.2.3 <2.0.0-0
(允许更新次版本号和修订号,但主版本号固定为 1)^0.2.3
等价于>=0.2.3 <0.3.0-0
(允许更新修订号,次版本号和主版本号保持不变)^0.0.3
等价于>=0.0.3 <0.0.4-0
(只允许修订号更新)^1.2.3-beta.2
等价于>=1.2.3-beta.2 <2.0.0-0
(允许更新当前预发布版本,如1.2.3-beta.4
,但不允许更新到新主版本号或次版本号,如1.2.4-beta.2
)
默认行为
- 如果缺少修订号,默认设为 0,但允许更新该范围内的版本。例如:
^1.2.x
等价于>=1.2.0 <2.0.0-0
^0.0.x
等价于>=0.0.0 <0.1.0-0
^0.0
等价于>=0.0.0 <0.1.0-0
- 如果缺少次版本号或修订号,默认设为 0,并允许在该范围内进行更新。例如:
^1.x
等价于>=1.0.0 <2.0.0-0
^0.x
等价于>=0.0.0 <1.0.0-0