Composer — инструмент управления зависимостями для PHP, аналог npm (Node.js) или pip (Python). Разработан Найлсом Адерманом и Харрисом Лиином при участии сообщества PHP. Позволяет объявить зависимости проекта в файле composer.json, и Composer загрузит нужные версии пакетов из репозитория Packagist.org.
Как работает
Файл composer.json описывает зависимости проекта с версионными ограничениями:
{
"require": {
"laravel/framework": "^10.0",
"guzzlehttp/guzzle": "^7.0",
"php": ">=8.1"
},
"require-dev": {
"phpunit/phpunit": "^10.0"
}
}
Команда composer install создаёт vendor/ с пакетами и composer.lock с точными версиями. composer.lock следует коммитить в репозиторий — это гарантирует идентичные версии на всех машинах. composer update обновляет версии в рамках ограничений и перезаписывает lock.
Composer генерирует автозагрузчик vendor/autoload.php. Одно включение в коде (require 'vendor/autoload.php';) — и все классы из всех зависимостей доступны без ручных require.
История
Composer разработан в 2011–2012 годах. Первый стабильный релиз — март 2012 года. Packagist.org — центральный репозиторий пакетов — запущен одновременно. К 2024 году Packagist хранит более 400 000 пакетов и обрабатывает миллиарды запросов в месяц. Laravel, Symfony, Drupal — используют Composer как обязательный инструмент развёртывания.
Связь с хостингом
Для развёртывания PHP-приложений на VPS команда composer install --no-dev --optimize-autoloader является стандартным шагом. На виртуальном хостинге Composer часто доступен через SSH или как встроенный инструмент панели управления. При отсутствии — Composer можно запустить локально и загрузить папку vendor/ по SFTP. Опция --no-dev исключает dev-зависимости из production-сборки.
Как работает Composer
Composer читает composer.json → резолвит граф зависимостей → скачивает пакеты через Packagist или VCS в vendor/. composer.lock фиксирует точные версии. composer install — по lock-файлу. composer update — обновляет до свежих совместимых версий. PSR-4 autoload регистрирует пространства имён.
Оптимизация для production
composer install --no-dev --optimize-autoloader: пропускает dev-пакеты (phpunit, debugbar), создаёт classmap вместо PSR-4 autoload (в 2–5 раз быстрее). Для CI/CD: кэшировать директорию vendor между сборками.
Безопасность зависимостей
composer audit — проверка зависимостей против базы CVE. Регулярное composer update для patch-версий. Фиксируйте мажорные версии в composer.json: "guzzlehttp/guzzle": "^7.0". Dependabot или Renovate — автоматические PR с обновлениями зависимостей.
Composer в Docker и CI/CD
Multi-stage Dockerfile: FROM composer:2 AS deps
RUN composer install --no-dev --optimize-autoloader
FROM php:8.2-fpm-alpine
COPY --from=deps /app/vendor /app/vendor. Кэш в GitHub Actions: ~/.composer/cache. Dockerfile best practice: COPY composer.json → COPY composer.lock → RUN composer install (layer caching).
Composer управляет зависимостями PHP-проектов: WordPress всё чаще использует Bedrock с Composer. Strapi-аналоги на PHP используют Composer. В Docker: многоэтапная сборка с Composer. CI/CD-пайплайны кэшируют vendor/ между сборками. Packagist — главный репозиторий PHP-пакетов.