composer版本号

Composer 的版本约束可以分为 版本号约束 和 稳定性约束,两者结合共同影响着 Composer 的版本约束。

版本号从大到小排列,稳定性从 stable、RC、beta、alpha、dev 排列,先排版本号后稳定性。

排列例如:

v1.3 > v1.2.5 > v1.2.3 > v1.2.3-beta > v1.2.1 > v1.2.0-rc > v1.2.0-beta > v1.2.0-dev > v1.2.0

运算符
Composer 可以通过运算符控制包版本。

1.2.3

匹配具体版本。

=1.0,<=1.2

范围匹配。有效的运算符有:>、>=、<、<=、!=。如果有多个范围,“,” 表示 逻辑AND,“|”表示 逻辑OR,AND 优先级高于 OR。

通配符 *

1.2.* 匹配 1.2.0(包含) 到 1.1(不包含)之间版本。

波浪号 ~

匹配 下一个重要版本。~ 1.2 匹配 1.2 到 2.0 之间版本。

幂符号 ^

匹配 最新而不产生兼容性问题的版本。

一横符号 -

匹配区间。5.2 - 5.4 匹配 5.2(包括)到 5.4(包括) 版本。

三段式版本号
大版本.小版本.补丁版本

如果你到软件或者库有一些 BUG 被修复了,补丁版本号 +1;
如果你增加了新功能,或者代码库增加了一个新方法,用户升级代码库后不会产生兼容问题,小版本号 +1;
如果软件完全重构,或者代码库完全重构以至于用户升级之后会产生兼容问题,大版本号 +1。
幂符号 ^ 对比 波浪号 ~
~ 只能改变最末尾的版本号,例如: 1.2.3 匹配 1.2.3(包含) 到 1.3.0 。
^ 参考上面 三段式版本号 ,匹配到不产生兼容性问题的版本。也就是说除 大版本号 之外,小版本号 和 补丁版本号 都可以改变。
当 版本号 只写到 小版本号 时,
和 ^ 匹配相同。例如 ~1.2 和 ^1.2 均匹配 1.2.0(包含) 到 2.0.0。
大版本号以 0 开头

当 大版本号 以 0 开头,^0.3.0 匹配的是 >=0.3.0,<0.4.0。

原因

semantic versioning 规定:以 0 开头的 大版本号 表示一个 非稳定版本(unstable),处于非稳定状态下,小版本号不允许向下兼容。根据 ^ 匹配到不产生兼容性问题的版本的规则,无法改变小版本,因为改变小版本会导入兼容性问题。

⚠️ 所以 ~0.1 匹配 >=0.1,<1.0 比较危险。