На сайте 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 что бы не пропустить следующее видео. В нём мы рассмотрим управление стабильностью версий, в частности, указание минимальной стабильной версии пакетов и библиотек.