Что означает тильда (~) в моем файле composer.json?

115

В моем файле composer.json есть такая строка:

"require": {
    ...
    "friendsofsymfony/user-bundle": "~2.0@dev",
    ...
},

Что делает тильды ~в ~2.0@devточности означает? Это заполнитель и всегда будет получать за диверсии , как 1.2.0, 2.2.0, 3.2.0и так далее? Не имеет смысла (и будет сделано с помощью *подстановочного знака).

Документация composer.json ничего не говорит о тильде.

Я спрашиваю, потому что я только что прочитал о проблеме безопасности в блоге Symfony, и они рекомендуют перейти на версию 1.3.3. Но выяснить версию FOSUserBundle не так просто (я не смог найти файл, содержащий эту версию).

Готлиб Ночнабель
источник

Ответы:

142

Тильда означает следующий значительный выпуск . В вашем случае это эквивалентно >= 2.0, < 3.0.

Полное объяснение находится на странице документации Tilde Version Range :

~Оператор лучше всего объяснить на примере: ~1.2эквивалентно >=1.2 <2.0.0, в то время как ~1.2.3это эквивалентно >=1.2.3 <1.3.0.

С другой стороны, using ~указывает минимальную версию, но позволяет последней указанной цифре повышаться.

Приведенный ниже комментарий Seldeak представляет собой простое краткое объяснение документации Composer.

AlterPHP
источник
73
Мне нравится использовать простое практическое правило: знак ~ позволяет последней цифре повышаться. например, ~2.2означает 2.2 и любой 2.x, где x равно 2 или выше. ~2.1.3на также любой 2.1.x, где x равно 3 или выше.
Seldaek
2
Чем ~2.0отличается от 2.*? Это полезно, только если последняя цифра не 0?
Джесси
24
~ 2.0 и 2. * одинаковы, НО ~ 2.3 и 2. * разные, потому что ~ 2.3 не допускает версии ниже 2.3, тогда как 2. * допускает 2.0, 2.1, 2.2 и т. Д.
AlterPHP
2

TildeОператор полезен для проектов, в которых версии своих библиотек используют semantic versioningсхему.

Semantic versioningэто скорее ориентир, оценивающий next significant release.

Для Composer этот оператор означает разрешение второстепенных выпусков (которые могут включать исправления) без разрешения основной версии (которая может быть несовместимой с предыдущими версиями) при установке и обновлении .

Например: ~4.1разрешит версии проекта, >=4.1но <5.0.

Кредиты: http://dwellupper.io/post/37/using-tilde-range-operator-to-resolve-dependency-version-in-composer-php

Пранав Рана
источник
0

Тильда ~в ~2.0@dev точности среднего значения для перехода на немедленную версию:

Например :

Если он у нас есть, сразу ~2.0@devперейдет к следующей версии => ~2.x@dev

Селим Реза
источник