Номера версий с кареткой и тильдой в 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 будет в будущем.
Другие вопросы по тегам