Composer: версионирование пакетов
Краткое описание версионности пакетов Composer (зависимостей проекта).
Введение
Зависимости проекта указываются в файле composer.json
. Пример файла:
"require": {
"php": ">=5.6",
"yiisoft/yii2": "~2.0.14",
"yiisoft/yii2-bootstrap": "~2.0.0",
"yiisoft/yii2-swiftmailer": "~2.0.0 || ~2.1.0",
"kartik-v/yii2-datecontrol": "dev-master",
"fishvision/yii2-migrate": "*",
"twig/twig": "2.4.1"
},
"require-dev": {
"yiisoft/yii2-debug": "~2.1.0",
"yiisoft/yii2-gii": "~2.1.0",
"yiisoft/yii2-faker": "~2.0.0",
"codeception/codeception": "^4.0",
"codeception/module-asserts": "^1.0",
"codeception/module-yii2": "^1.0",
"codeception/module-filesystem": "^1.0",
"codeception/verify": "~0.5.0 || ~1.1.0",
"symfony/browser-kit": ">=2.7 <=4.2.4"
},
В секцию require
ставятся пакеты, которые в работе приложения играют ключевую роль. От них зависит весь остальной код приложения.
В секцию require-dev
устанавливаются пакеты, которые требуются при разработке приложения. Например, пакет codeception/codeception
необходим только при разработке приложения для его тестирования. На боевом сервере нет необходимости "подтягивать" пакеты dev окружения. Поэтому и команда для композера в "проде" будет с указанием флага --no-dev
:
composer install --no-dev
Шпаргалка по командам Composer здесь.
Ограничение точной зависимости
Вы можете указать точную версию пакета. Composer установит эту версию и только её:
"twig/twig": "2.4.1"
Диапазон версий
Используя операторы сравнения, вы можете указать диапазоны допустимых версий. Допустимые операторы: >
, >=
, <
, <=
, !=
.
Вы можете определить несколько диапазонов. Диапазоны, разделенные пробелом (
) или запятой (,
) будут рассматриваться как логическое И (AND). Двойная вертикальная черта (||
) будет обрабатываться как логическое ИЛИ (OR). И (AND) имеет более высокий приоритет, чем ИЛИ (OR).
Примечание!
Будьте осторожны при использовании неограниченных диапазонов, так как вы можете неожиданно установить версии, которые нарушают обратную совместимость. Вместо этого рассмотрите возможность использования оператора каретки в целях безопасности.
Примеры:
// Больше либо равно версии 5.6
"php": ">=5.6"
// Больше либо равно версии 2.7 И меньше либо равно версии 4.2.4
"symfony/browser-kit": ">=2.7 <=4.2.4"
// Версия 2.0.0 ИЛИ версия 2.1.0
"package-name": "2.0.0 || 2.1.0"
Диапазон версий с переносом через дефис
Включительный набор версий. Частичные версии справа включают подстановочный знак. Например, 1.0 – 2.0
эквивалентно >=1.0.0 <2.1
, поскольку 2.0
становится 2.0.*
. С другой стороны, 1.0.0 - 2.1.0
эквивалентно >=1.0.0 <=2.1.0
.
Пример:
// Версия пакета больше либо равна 2.0 И меньше 3.1
"package-name": "2.0 - 3.0"
Диапазон версий подстановочных знаков
Вы можете указать шаблон с подстановочным знаком *
. 1.0.*
эквивалентно >=1.0 <1.1
.
Пример:
// Версия пакета больше либо равна 1.0 И меньше 1.1
"package-name": "1.0.*"
// Любая версия этого пакета
"fishvision/yii2-migrate": "*"
Оператор тильды
Оператор ~
лучше всего поясняется на примере: ~1.2
эквивалентен >=1.2 <2.0.0
, а ~1.2.3
эквивалентен >=1.2.3 <1.3.0
. Как видите, это в основном полезно для проектов, поддерживающих семантическое управление версиями. Обычно используется для обозначения минимальной дополнительной версии, от которой вы зависите, например, ~1.2
(которая допускает все до, но не включая 2.0
). Поскольку теоретически не должно быть разрывов обратной совместимости до версии 2.0
, это хорошо работает. С другой стороны, использование ~
указывает минимальную версию, но позволяет последней указанной цифре повышаться.
Пример:
// Версия пакета больше либо равна 2.0.14 И меньше 2.1
"yiisoft/yii2": "~2.0.14"
Диапазон версий каретки
Оператор ^
ведет себя очень похоже с оператором тильда, но он ближе к семантическому управлению версиями и всегда разрешает неразрывные обновления. Например, ^1.2.3
эквивалентен >=1.2.3 <2.0.0
, поскольку ни один из выпусков до 2.0
не должен нарушать обратную совместимость. Для версий до 1.0
он также действует с учетом требований безопасности и рассматривает ^0.3
как >=0.3.0 <0.4.0
.
Это рекомендованный оператор для максимальной совместимости при написании кода библиотеки.
Пример:
"codeception/codeception": "^4.0"
Ограничения стабильности
Если вы используете ограничение, которое явно не определяет стабильность, Composer внутренне по умолчанию будет использовать -dev
или -stable
, в зависимости от используемых операторов. Это происходит прозрачно.
Если вы хотите явно рассматривать только стабильную версию в сравнении, добавьте суффикс -stable
.
Примеры:
1.2.3 | =1.2.3.0-stable | ||
>1.2 | >1.2.0.0-stable | ||
>=1.2 | >=1.2.0.0-dev | ||
>=1.2-stable | >=1.2.0.0-stable | ||
<1.3 | <1.3.0.0-dev | ||
<=1.3 | <=1.3.0.0-stable | ||
1 - 2 | >=1.0.0.0-dev <3.0.0.0-dev | ||
~1.3 | >=1.3.0.0-dev <2.0.0.0-dev | ||
1.4.* | >=1.4.0.0-dev <1.5.0.0-dev |
Резюме
"require": {
"vendor/package": "1.3.2", // exactly 1.3.2
// >, <, >=, <= | укажите верхние / нижние границы
"vendor/package": ">=1.3.2", // все, что выше или равно 1.3.2
"vendor/package": "<1.3.2", // ниже 1.3.2
// * | подстановочный знак
"vendor/package": "1.3.*", // >=1.3.0 <1.4.0
// ~ | позволяет быть выше последней указанной цифре
"vendor/package": "~1.3.2", // >=1.3.2 <1.4.0
"vendor/package": "~1.3", // >=1.3.0 <2.0.0
// ^ | не допускает критических изменений
"vendor/package": "^1.3.2", // >=1.3.2 <2.0.0
"vendor/package": "^0.3.2", // >=0.3.2 <0.4.0 // за исключением тех случаев, когда основная версия 0
}
Официальная документация здесь .
Предыдущая запись
PHP: Регулярные выражения - проверка данныхСледующая запись
Время сессии phpMyAdmin в OpenServer