composer-docs/faq/why-are-version-constraints...

13 lines
983 B
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 为什么说“比较符”和“通配符”相结合的版本约束是坏主意?
这是人们常犯的一个错误,定义了类似 `>=2.*``>=1.1.*` 的版本约束。
通过思考它所表示的真正含义,你很快就会发现,它并没有多大意义。如果我们分解 `>=2.*`,你会得到两个部分:
- `>=2` 表示资源包应该是 2.0.0 或以上版本。
- `2.*` 表示资源包版本应该介于 2.0.0 (含)和 3.0.0(不含)之间。
正如你所看到的,要同时满足这两个规则包版本必须 >=2.0.0,但它是无法判断的,因为当你这么写的时候,你究竟是想要包含 3.0.0
版本还是不包含?它应该进行匹配吗?因为你定义了 `>=2`,但同时你又限制它为 `2.*`
出于这个原因Composer 将抛出一个错误,并告诉你这是无效的。想要确切的表达你意思,最简单的方法就是仅使用“比较符”和“通配符”其中的一种来定义约束。