Ответ вслух Senior Composer и PSR обновлено

Управление зависимостями в PHP-проекте

Вопрос

Как вы управляете зависимостями PHP-проекта и обновляете их?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В composer.json указываю диапазоны через каретку, например ^7.2, чтобы получать совместимые исправления. Файл composer.lock всегда в репозитории: CI и продакшен ставят зависимости через composer install, то есть ровно те версии, которые проверены.

Что должно прозвучать в ответе

  • composer.json с диапазонами, composer.lock в репозитории

  • install в CI и на проде, update осознанно и в отдельной ветке

  • require-dev для инструментов разработки, --no-dev на проде

  • composer audit и Dependabot или Renovate для обновлений

  • Семантическое версионирование, осторожность с 0.x и мажорными обновлениями

  • Проверка тестами и статическим анализом после обновления

Что могут спросить следом

  • Что делать, если две библиотеки требуют несовместимые версии одного пакета?
  • Почему Composer не может поставить две версии пакета, как npm?

Разбор

В composer.json указываю диапазоны через каретку, например ^7.2, чтобы получать совместимые исправления. Файл composer.lock всегда в репозитории: CI и продакшен ставят зависимости через composer install, то есть ровно те версии, которые проверены.

Инструменты разработки, PHPUnit, PHPStan, Rector, кладу в require-dev, а на проде ставлю с --no-dev --optimize-autoloader. Обновления делаю осознанно: Renovate или Dependabot открывают пулреквесты, CI гоняет тесты и анализатор, мажорные обновления читаю по changelog.

Безопасность проверяю composer audit в CI. Если две библиотеки требуют несовместимые версии одного пакета, Composer откажется ставить: в PHP один класс нельзя загрузить в двух версиях. Тогда ищу совместимые версии через composer why-not, обновляю одну из библиотек или заменяю её.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.