Почему ограничения версий, сочетающие сравнения и подстановочные знаки, представляют собой плохую идею?

Это довольно распространенная ошибка, которую люди делают, определяя ограничения версии в своем пакете, как >=2.* или >=1.1.*.

Если вы подумаете об этом и что это действительно означает, хотя, вы быстро поймете, что это не имеет большого смысла. Если мы разложим >=2.*, у вас есть две части:

  • >=2, который говорит, что пакет должен быть в версии 2.0.0 или выше.
  • 2.* говорит, что пакет должен быть между версией 2.0.0 (включительно) и 3.0.0 (эксклюзивной).

Как вы видите, оба правила согласны с тем, что пакет должен быть >=2.0.0, но невозможно определить, когда вы написали, что вы думаете о пакете в версии 3.0.0 или нет. Должно ли оно совпадать, потому что вы спросили >=2 или не совпали, потому что вы запросили 2.*?

По этой причине Composer просто выдает ошибку и говорит, что это недопустимо. Самый простой способ исправить это - подумать о том, что вы действительно имеете в виду, и использовать только одно из этих правил.