1.0.* 匹配 1.0.0 到 1.0.999 的所有修订版,等价于 >=1.0.0 且 =1.0.0 且

在 Composer 中,版本约束 1.0.* 和 ~1.0 看起来相似,但它们的含义和行为有明显区别。理解这些差异有助于更精确地控制依赖包的更新范围。
1.0.*:匹配指定主版本和次版本下的所有修订版本
这个写法表示允许安装 1.0 开头的所有版本,即匹配 1.0.0 到 1.0.999... 的任意修订版(patch)。
它等价于:
- >=1.0.0
也就是说,只要主版本是 1,次版本是 0,任何 patch 版本都可以接受。例如:1.0.1、1.0.5、1.0.20 都符合要求,但 1.1.0 不行。
~1.0:波浪线操作符,按“最小边界”进行限制
波浪线 ~ 的规则是:锁定最低指定版本的**最后一个数字位**,允许在其后的修订中升级。
对于 ~1.0,Composer 会理解为:
- >=1.0.0
这意味着它允许所有 1.x 版本,直到但不包括 2.0.0。比如 1.0.5、1.3.0、1.9.9 都可以安装。
注意:~1.0 实际上等同于 >=1.0.0 ,因为它把 1.0 当作“最小边界”,而只锁定主版本(major),允许次版本(minor)和修订版本(patch)自由更新。
如果你写的是 ~1.0.0,那结果就不同了,它表示:
- >=1.0.0
这反而和 1.0.* 是一样的范围。
关键区别总结
回到问题本身:
- 1.0.* → 允许 1.0.x(即 >=1.0.0 且
- ~1.0 → 允许 1.x.x(即 >=1.0.0 且
所以最大的不同在于是否允许次版本(minor)升级。使用 1.0.* 更保守,只接受补丁更新;而 ~1.0 更宽松,接受所有 1.x 的功能更新(minor),只要不进 2.0。
基本上就这些,不复杂但容易忽略细节。









