为什么将比较和通配符组合在一起的版本约束是一个坏主意?#

这是一个相当常见的错误,人们在他们的包要求中定义版本约束时会犯这样的错误,比如 >=2.*>=1.1.*

如果你仔细想想它的真正含义,你很快就会意识到它没有意义。如果我们分解 >=2.*,你将得到两个部分:

  • >=2 表示包的版本应该在 2.0.0 或更高。
  • 2.* 表示包的版本应该在 2.0.0(含)和 3.0.0(不含)之间。

正如你所见,这两个规则都同意包必须 >=2.0.0,但无法确定你写的时候是否考虑了 3.0.0 版本的包。它应该匹配,因为你要求了 >=2,还是不应该匹配,因为你要求了 2.*

由于这个原因,Composer 会抛出一个错误,指出这是一个无效的约束。解决方法是考虑你真正想要表达的意思,只使用其中的一条规则。

发现错别字了吗?文档中有什么错误吗?分叉并编辑 它!