composer.lock: воспроизводим состав зависимостей приложения
Чем отличаются composer install и update и как composer.lock помогает установить одинаковые версии библиотек.
- Разработкаcomposer update обновляет выбор пакетов
- composer.lockФиксирует точные версии
- Выкладкаcomposer install устанавливает зафиксированный набор
В репозитории одинаковый composer.json, а на двух машинах установились разные библиотеки. Это возможно: файл задаёт допустимые версии, но не обязательно их точный набор. Для приложения этот набор фиксируют в composer.lock. Дальше важно разделять две задачи — обновить зависимости и установить уже выбранные версии.
От update к install
# Рабочая ветка, где намеренно меняют зависимости
composer update
composer validate --strict
# Чистое окружение проверки с сохранённым composer.lock
composer install --no-interaction
# Установка набора для рабочего окружения
composer install --no-dev --no-interaction --optimize-autoloader
composer check-platform-reqs --no-devСначала пройдите эту последовательность в среде разработки. Полный update пересчитывает доступный набор зависимостей в рамках ограничений; для ограниченного обновления можно выбрать конкретный пакет. После изменения анализируют разницу lock-файла и запускают проверки приложения. В систему контроля версий приложения обычно попадают оба файла. Каталог vendor получают установкой, если правила проекта не устанавливают иной способ поставки.
Что именно фиксирует lock-файл
Сохранённые версии помогают воспроизвести состав библиотек, но не делают одинаковыми операционную систему, расширения PHP и настройки окружения. Проверка платформы нужна отдельно. Флаг no-dev исключает зависимости разработки из установки, поэтому скрипты рабочего приложения не должны случайно обращаться к тестовой библиотеке. Оптимизация загрузчика классов решает задачу поиска классов и не доказывает совместимость установленного кода с бизнес-сценариями.
При установке Composer может выполнять скрипты проекта и подключать плагины. Это исполняемый код, поэтому источник зависимостей и политика разрешённых плагинов должны быть понятны. Не подменяйте проверку платформы постоянным игнорированием требований: успешное скачивание пакетов ещё не означает, что приложение запустится. Для библиотеки, публикуемой другим разработчикам, роль lock-файла отличается: потребитель разрешает зависимости в своём проекте и не получает автоматически ваш зафиксированный набор.
Проверка в двух чистых каталогах
Установите один коммит приложения в двух чистых каталогах с одинаковыми параметрами install. Сравните версии пакетов и убедитесь, что composer.lock не изменился. Затем проверьте требования PHP, само приложение и установку без dev-пакетов. Так можно проверить процедуру выпуска, хотя вся серверная среда от этого одинаковой не станет.
