COMPOSER #3. НЮАНСЫ INSTALL И UPDATE КОМАНД

composer #3. Особенности install и update команд

В прошлой статье мы научились искать и устанавливать пакета. Попробовали установить и потрогать пакет monolog/monolog. Сейчас хочу рассказать о версионировании пакетов composer и о разнице между командами composer update и composer install. Экспериментировать будем на тестовом проекты с прошлой статьи.

Редактируем версию пакета

В примере выше мы указывали конкретную версию пакета 2.2. Но это не лучший вариант, так как пакеты регулярно обновляются и безопаснее использовать новые версии.


Composer допускает несколько способов для указывания версии. Например мы можем использовать *. Если мы укажем версию как «2.*» то composer установит самую новую версию в диапазоне от 2.0 до 3.0. Или мы можем указать версию «2.2.*», тогда диапазон будет от 2.2.0 до 2.3.0.


Еще можно указать версию с помощью условия. Например если задать версию как «>=1.0.0 <2.1» то диапазон допустимых версий будет равен от 1.0.0 до 2.1. Но это далеко не все способы. Более подробно об этом можно почитать тут.

composer update

Давайте теперь отредактируем версию пакета в файле composer.json следующим образом.

"monolog/monolog": "2.1.*"

Теперь для того чтобы composer переустановил этот пакет нужно выполнить следующую команду.

composer update

Эта команда перепроверит файл composer.json, доустановит новые пакеты если такие были добавлены и обновит версии существующих. После этого отредактирует файл composer.lock записав в него актуальную информацию по установленным пакетам. И сейчас если посмотреть в файл composer.lock то мы увидим что версия установленного пакета 2.1.1.

...
    "name": "monolog/monolog",
    "version": "2.1.1",
...

Это самая новая версия в диапазоне от 2.1.0 до 2.2.0 которая выпущена на момент написания статьи.
А еще если пролистать этот файл дальше то мы увидим что установился еще один пакет.

...
    "name": "psr/log",
    "version": "1.1.3",
...

Мы этот пакет не указывали но он был указан в зависимостях внутри пакета monolog/monolog. И composer автоматически доустановил эту зависимость.

Разница между install и update

Эти две команды похожи и разница не очевидна. В случае когда мы запускаем composer install то в первую очередь проверяется наличие файла composer.lock и устанавливаются все пакеты из это файла. При этом composer.json файл полностью игнорируется. Если же composer.lock файл не был найден то информация берется из файла composer.json, происходит установка и создается composer.lock.


А команда composer update всегда смотрит на файл composer.json при необходимости обновляет и устанавливает недостающие пакеты и обновляет composer.lock файл. Это удобно при совместной работе над проектом. Можно поделиться одним composer.lock файлом и выполнив composer install. И тогда все участники команды будут уверены что у всех установлены одинаковые версии пакетов.


А на этом пока все. Пробуйте и если что-то не выйдет, то задавайте вопросы в комментариях.