Номера версий с кареткой и тильдой в composer.json
Интересно, в чем разница между каретой и тильдой в composer.json? Могу ли я сказать это так: caret (^) блокирует первый и второй номер версии (1.2 в 1.2.3) и тильда (~) блокирует только первый номер версии (1 в 1.2.3)?
https://getcomposer.org/doc/articles/versions.md#next-significant-release-operators
1 ответ
Из документации вы связали:
~ 1.2 эквивалентно>=1.2 <2.0.0, а ~1.2.3 эквивалентно>= 1.2.3 <1.3.0
^ 1.2.3 эквивалентно>=1.2.3 <2.0.0
Тильда зависит от количества цифр в номере версии. Последняя цифра может отличаться.
Каретка почти всегда является лучшим выбором, потому что она действует аналогично, чтобы быть прямой заменой (~1.2
такой же как ^1.2
или же ^1.2.0
), но предлагают большую гибкость при обращении к ненулевым версиям патча (^1.2.3
это не то же самое, что ~1.2.3
Поскольку версия тильды допускает обновления только ниже 1.3.0, каретка допускает обновления ниже 2.0.0).
Единственная причина, по которой можно использовать тильду в качестве требования к версии, заключается в том, что вам приходится иметь дело с "нулевыми" версиями, которые получают совместимые обновления. Тильда не отличается между ~0.1
а также ~1.1
, в обоих случаях это позволит обновления до следующего основного номера версии (ниже 1,0 или 2,0 соответственно). Оператор каретки запрещает незначительные обновления в этом диапазоне: ^0.1
не разрешает обновления до 0.2, потому что в семантическом управлении версия с нулевой точкой-чем-то может вносить несовместимые изменения при переходе к нулевой-точечной что-то +1.
Резюме:
- Предпочитайте оператор каретки - это самый простой способ форсировать минимальные версии патчей.
- Предпочитайте версии выше 0.x (начиная с 1.0.0) и используйте семантическое управление версиями для собственного кода.
- На этапе разработки вы можете использовать
alpha
,beta
или жеrc
стабильность вместе с предполагаемой окончательной версией, т.е.1.0.0-alpha1
будет грубый план того, что1.0.0
будет в будущем.