我们在开发过程中使用到许多第三方库,需要在composer.json
中指明依赖库版本规则来安装恰当的包。
Composer 推荐的版本规则是语义化版本,版本格式:主版本号.次版本号.修订号
,版本号递增规则如下:
- 主版本号:当你做了不兼容的 API 修改
- 次版本号:当你做了向下兼容的功能性新增
- 修订号:当你做了向下兼容的问题修正
基本约束
具体版本
安装指明的具体版本,如果其他依赖包需要不同的版本,安装或更新过程将失败。
1.2.3
范围
使用比较运算符指明有效版本范围。可用操作符如下:>
、>=
、<
、<=
、!=
。
可以定义多个范围,使用空格( )或者逗号(,
)分隔的范围当做逻辑与操作,使用双管道(||
)分隔的范围当做逻辑或操作。
>=1.0
>=1.0 <2.0
>=1.0 <1.1 || >=1.2
带连字符的范围
非完整的版本号会用通配符补全,比如 2.0
补全为 2.0.*
。
1.0 - 2.0
等价于>=1.0 <2.1
1.0.0 - 2.1.0
等价于>=1.0.0 <=2.1.0
通配符
可以在版本号中使用通配符(*
)。
1.0.*
等价于>=1.0 <1.1
下一个重要版本
对于遵循语义化版本的项目,波浪号和脱字符提供更加简介的表达。
波浪号(~)
波浪号常用于标记依赖包的最小版本。可以理解为波浪号标记依赖包的最低版本,并允许版本号最后一位数字增加(不适用于主版本号)。
~1.2
等价于>=1.2 <2.0.0
~1.2.3
等价于>=1.2.3 <1.3.0
脱字符(^)
脱字符的行为和波浪号类似,但更强调语义化版本,总是允许向后兼容的更新。
^1.2.3
等价于>=1.2.3 <2.0.0
不过,对于早于1.0的版本,脱字符处理逻辑如下:
^0.3
等价于>=0.3 <0.4
注:为了最大化互操作性,对于库类型的项目,推荐使用脱字符声明依赖包的版本。
稳定性
如果版本约束中没有显式定义稳定性,Composer 内部会根据操作符的不同,默认附加 -dev
或者 -stable
。如果你希望只安装稳定版本,请在使用 -stable
后缀。
约束 | 内部 |
---|---|
1.2.3 |
=1.2.3-stable |
>1.2 |
>1.2.0.0-stable |
>=1.2 |
>=1.2.0.0-dev |
>=1.2-stable |
>=1.2.0.0-stable |
<1.3 |
<1.3.0.0-dev |
<=1.3 |
<=1.3.0.0-stable |
1 - 2 |
>=1.0.0.0-dev <3.0.0.0-dev |
~1.3 |
>=1.3.0.0-dev <2.0.0.0-dev |
1.4.* |
>=1.4.0.0-dev <1.5.0.0-dev |