为什么组合使用比较运算符和通配符的版本约束是一个坏主意?
这是人们常犯的一个相当常见的错误,他们在包的依赖引入中定义像 >=2.* 或 >=1.1.* 这样的版本约束。
如果你仔细想想这真正意味着什么,你会很快意识到这没有多大意义。如果我们分解 >=2.*,你会得到两个部分:
>=2表示包应该在 2.0.0 版本或更高版本2.*表示包应该在 2.0.0 版本(包含)和 3.0.0 版本(不包含)之间
如你所见,这两个规则都同意包必须 >=2.0.0,但无法确定当你写这个约束时是否考虑了 3.0.0 版本的包。它应该匹配吗?因为你要求了 >=2;还是不应该匹配?因为你要求了 2.*?
因此,Composer 会抛出错误并说这是无效的。解决方法是思考你真正想要表达的意思,并只使用其中一个规则。