^允许主版本号不变的兼容更新,如^1.2.3可升级至1.x.x;~限制更严格,如~1.2.3仅允许1.2.x的补丁更新,锁定主次版本。

在 composer 中,^ 和 ~ 是两种常用的版本约束符号,它们控制依赖包的版本更新范围,但规则不同。
^ 版本约束(兼容性约束)
使用 ^1.2.3 表示允许安装与 1.2.3 兼容的更高版本,遵循语义化版本规范(SemVer)。
具体规则是:不改变最左边非零数字的主版本号。例如:
- ^1.2.3 允许更新到 1.x.x 的任意版本,但不会升级到 2.0.0
- ^0.5.6 允许 0.5.x 到 0.9.x(直到 1.0.0 前),因为 0.x 被认为不稳定
- ^0.1.2 只允许 0.1.x,不会跳到 0.2.0
~ 版本约束(波浪线约束)
使用 ~1.2.3 表示只允许安装大于等于 1.2.3 且小于下一个**次要版本**的版本。
也就是说,它锁定主版本和次版本,只允许修订版本(补丁)更新。
- ~1.2.3 等价于 >=1.2.3 且
- ~1.2 等价于 >=1.2.0 且
- ~0.5.6 表示 >=0.5.6 且
关键区别总结
- ^ 更宽松,适用于希望获得向后兼容的新功能(小版本更新)
- ~ 更严格,仅允许修复级别更新,适合对稳定性要求高的项目
- 比如:^1.2.3 可能装 1.9.9,而 ~1.2.3 最多只能到 1.2.99
选择哪个取决于你对依赖更新的控制需求。追求稳定用 ~,接受兼容新特性用 ^。基本上就这些。


