Що таке Composer і навіщо він потрібен
Composer — стандартний менеджер залежностей для PHP. Він дозволяє підключати сторонні бібліотеки (Laravel, Symfony, Guzzle, PHPUnit і тисячі інших) однією командою, керувати версіями пакетів та автоматично підключати всі класи через автозавантажувач.
Встановлення Composer на Ubuntu/Debian
# Завантажуємо інсталятор
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
# Перевіряємо хеш (актуальний хеш на getcomposer.org/download)
php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
# Перевіряємо встановлення
composer --version/usr/local/bin/. Для встановлення лише для поточного користувача — у ~/.local/bin/.Оновлення Composer
composer self-update
# Відкат до попередньої версії:
composer self-update --rollbackСтворення нового проєкту
# Новий проєкт Laravel:
composer create-project laravel/laravel myapp
# Новий проєкт Symfony:
composer create-project symfony/skeleton myappОсновні команди Composer
| Команда | Опис |
|---|---|
composer install | Встановити залежності з composer.lock |
composer update | Оновити всі залежності до найновіших версій |
composer require vendor/package | Додати новий пакет |
composer remove vendor/package | Видалити пакет |
composer dump-autoload -o | Перегенерувати оптимізований автозавантажувач |
composer show | Перелік встановлених пакетів |
Структура composer.json
{
"name": "mycompany/myapp",
"require": {
"php": "^8.1",
"guzzlehttp/guzzle": "^7.0",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Оптимізація для production
На production-сервері завжди запускайте Composer з оптимізацією автозавантажувача:
composer install --no-dev --optimize-autoloader --no-interaction
# або
composer dump-autoload --optimize --no-devcomposer update на production — це здатне зламати застосунок оновленням несумісних версій. Оновлюйте залежності локально, фіксуйте composer.lock у git і деплойте через composer install.Робота без інтернету (--prefer-dist)
composer install --prefer-dist --no-scriptsРеальні помилки Composer
Requirements could not be resolved
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires php-ext-intl but it is not present.Composer перевіряє платформні вимоги за тим PHP, з-під якого сам запущений (зазвичай це CLI), а не за тим, що реально працює в PHP-FPM на проді. Встановили розширення лише для FPM — Composer усе одно відмовиться працювати, доки його не побачить CLI-версія.
Allowed memory size exhausted під час install
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 20480 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Solver.php
Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.Сам Composer — це PHP-скрипт, і на нього діє той самий memory_limit, що й на решту коду. Розв'язання проєкту з великим деревом залежностей може потребувати більше пам'яті, ніж дозволено за замовчуванням.
composer.lock застарів
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. It is recommended that you run "composer update" or "composer update <package name>".Це попередження, а не відмова: composer install усе одно відпрацює за старим composer.lock. Небезпека в іншому — на CI це попередження легко пропустити в потоці логів, і на прод поїдуть версії пакетів, що не збігаються з тим, що реально тестували.
Коли команди з цієї статті не підходять
- Розробка ведеться без доступу до packagist.org (закритий контур, ізольована мережа) — потрібен приватний дзеркальний репозиторій (Satis, Private Packagist), звичайні команди
requireпросто зависнуть в очікуванні мережі. - Composer CLI та версія PHP у продакшн-FPM розходяться — платформна перевірка під час встановлення пройде, а код на проді впаде через несумісний синтаксис чи відсутню функцію.
- Прапор
--ignore-platform-reqs«лікує» помилку вимог, але переносить проблему несумісності прямо на прод — використовуйте його лише свідомо й тимчасово.
Перевірка результату
# Зняти повну діагностику оточення Composer
composer diagnose
# Перевірити синтаксис і коректність composer.json
composer validate --strict
# Збільшити ліміт пам'яті лише для цього запуску
COMPOSER_MEMORY_LIMIT=-1 composer installcomposer validate --strict знаходить не лише синтаксичні помилки JSON, а й стилістичні проблеми на кшталт незафіксованих версій залежностей — корисно проганяти його перед кожним релізом.