Найти в Дзене
CODEARMY

Управление версиями в Composer

На сайте github мы видели что они предлагают занести в composer.json такую запись:

"phpmailer/phpmailer": "~6.0"

Но после того как мы поставили пакет, у нас там оказалась такая запись:

"phpmailer/phpmailer": "^6.0"

Вроде бы похожи, но в первом случае перед версией звёздочка, а во втором символ циркумфлекс. Почему они разные и что это значит?

Перед тем, как я это объясню давайте поставим ещё что ни будь для разнообразия, например, тот самый psr/log это даже не логгер, это интерфейс для написания собственного логгера, в общем не важно, он нужен нам только для массовки.

У нас в проекте стал phpmailer версии 6.0, log версии 1.0

В чём теперь идея? Я могу отправить коллеге свой проект с этим файлом composer.json и он по нему установит все необходимые пакеты для работы, но именно те версии, которые указаны в json файле. Ведь может пройти время и например могут появиться новые версии PHPMailer - 6.1, 6.2 и даже 7 и если коллега поставит последнюю версию, то это может вызвать сбой в проекте, ведь проект написан с учётом 6 версии.

Версии обозначаются следующим образом:

6.0 - точное указание версии. Только эта и никакая иначе.

Далее есть тильда и есть циркумлекс. Разница между тильдой и циркумфлексом в том, что:

~6.2.3 обновит до 6.2.99 т.е. поставит последнюю возможную версию до 6.3

^6.2.3 обновит до 6.9.9 т.е. поставит последнюю возможную версию до 7.0

И есть ещё звёздочка. Она работает как тильда.

6.2.* будет работать как ~6.2.3

При использовании json-файла, моему коллеге не надо думать о версиях, ему надо сделать всего одну команду: composer install и всё, всё пакеты установятся автоматически. Давайте сымитируем что у нас нет ничего. Для этого удалим папку vendor командой rm -rf vendor, проверим действительно её нет, теперь делаем composer install.

Подписывайтесь на канал на youtube что бы не пропустить следующее видео. В нём мы рассмотрим управление стабильностью версий, в частности, указание минимальной стабильной версии пакетов и библиотек.