Composer это менеджер зависимостей и автозагрузчик, без которого не обходится ни один PHP-проект. PSR это стандарты совместимости. Вопросы простые, но выдают опыт.
composer.json и composer.lock
composer.json: какие пакеты и в каких диапазонах версий нужны.composer.lock: какие точные версии установлены, с хешами. Для приложения коммитится обязательно.
composer require guzzlehttp/guzzle:^7.9 # добавить пакет
composer install # поставить строго по lock
composer update vendor/package # обновить и переписать lock
composer install --no-dev --optimize-autoloader # продакшен
На сервере и в CI только install. update делается осознанно, в отдельной ветке, с прогоном тестов.
Ограничения версий
| Запись | Диапазон |
|---|---|
^1.2 | >=1.2.0 <2.0.0 |
^0.3 | >=0.3.0 <0.4.0 |
~1.2 | >=1.2.0 <2.0.0 |
~1.2.3 | >=1.2.3 <1.3.0 |
1.2.* | >=1.2.0 <1.3.0 |
Composer ставит одну версию каждого пакета на проект: два пакета с несовместимыми требованиями к общей зависимости вызовут конфликт. Диагностика: composer why-not vendor/pkg 2.0. Версию PHP продакшена задают в config.platform.php, чтобы lock-файл подходил серверу.
Автозагрузка PSR-4
"autoload": { "psr-4": { "App\\": "src/" } },
"autoload-dev": { "psr-4": { "Tests\\": "tests/" } }
Класс App\Billing\Invoice ищется в src/Billing/Invoice.php: префикс отрезается, пространства имён становятся каталогами. Для продакшена --optimize-autoloader строит classmap, а --classmap-authoritative ещё и запрещает поиск на диске.
Стандарты PSR
- PSR-1, PSR-12 и PER Coding Style: стиль кода (PHP-CS-Fixer, PHP_CodeSniffer).
- PSR-3: логгер. PSR-4: автозагрузка.
- PSR-6, PSR-16: кеш. PSR-7, PSR-15, PSR-17, PSR-18: HTTP-сообщения, middleware, фабрики, клиент.
- PSR-11: контейнер. PSR-14: события. PSR-20: часы.
Смысл интерфейсных PSR: библиотека зависит от Psr\Log\LoggerInterface, а не от Monolog, и работает в любом фреймворке.
Полезное
composer auditв CI: известные уязвимости зависимостей.composer outdated,composer bump.scriptsдля своих команд:composer test,composer lint.- Приватные пакеты:
repositoriesи токены вauth.json, который не коммитят.
Частые ошибки
composer updateна продакшене.- lock-файл не в репозитории.
- Dev-зависимости на сервере.
- Забытый
dump-autoloadпосле ручного изменения карты автозагрузки.
Что спросят на собесе
- Зачем нужен
composer.lockи чемinstallотличается отupdate? - Что означает
^1.2и~1.2.3? - Как работает PSR-4?
- Какие PSR вы знаете и зачем они?
- Что делать при конфликте версий зависимостей?