composer 版本号前置~与^符号的区别

语义化版本
https://semver.org/lang/zh-CN/

了解版本号分类

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

主版本号:当你做了不兼容的 API 修改,
次版本号:当你做了向下兼容的功能性新增,
修订号:当你做了向下兼容的问题修正。
先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
~表示版本号只能改变最末尾那段(如果是 ~x.y 末尾就是 y,如果是 ~x.y.z 末尾就是 z)
~1.2.3 代表 1.2.3 <= 版本号 < 1.3.0
~1.2   代表  1.2 <= 版本号 <2.0

^表示除了大版本号以外,小版本号和补丁版本号都可以变
^1.2.3 代表 1.2.3 <= 版本号 < 2.0.0

特殊情况0开头的版本号:
^0.3.0 等于 0.3.0 <= 版本号 <0.4.0  注意:不是 <1.0.0
因为:semantic versioning 的规定是,大版本号以 0 开头表示这是一个非稳定版本(unstable),
如果处于非稳定状态,小版本号是允许不向下兼容的,

所以如果你要指定 0 开头的库那一定要注意:
危险写法:~0.1 等于 0.1.0 <= 版本号 <1.0.0
保险写法:^0.1 等于 0.1.0 <= 版本号 <0.2.0

所以用这个说法来理解composer.json里面版本的控制

[其他的说法]
https://blog.csdn.net/SakuraLLj/article/details/77931672
在这里插入图片描述在这里插入图片描述
https://learnku.com/docs/composer/2018/versions/2098#3ae463