Управление зависимостями в PHP-проекте
Вопрос
Как вы управляете зависимостями PHP-проекта и обновляете их?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.