Ответ
Секции require и require-dev в файле composer.json разделяют зависимости по их назначению в жизненном цикле проекта.
require содержит пакеты, необходимые для работы приложения в любом окружении, включая продакшен. Это основные зависимости.
require-dev содержит пакеты, нужные только во время разработки, тестирования или CI/CD. Они не требуются для работы приложения на боевом сервере.
Практический пример composer.json:
{
"name": "myapp/project",
"require": {
"laravel/framework": "^10.0",
"guzzlehttp/guzzle": "^7.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0",
"fakerphp/faker": "^1.20",
"barryvdh/laravel-debugbar": "^3.0"
}
}
Как это работает при установке:
composer install— по умолчанию устанавливает пакеты из обеих секций.composer install --no-dev— устанавливает только пакеты изrequire. Это стандартная команда для деплоя на продакшен.composer update— обновляет пакеты согласно правилам версионирования вcomposer.json. Флаг--no-devтакже игнорирует dev-зависимости.
Типичное разделение:
- В
require: фреймворки (Laravel, Symfony), библиотеки для работы с БД (Doctrine), HTTP-клиенты, кеширование и т.д. - В
require-dev: фреймворки для тестирования (PHPUnit, Pest), генераторы тестовых данных (Faker), инструменты для профилирования и отладки (Xdebug, Laravel Debugbar), статические анализаторы (PHPStan, Psalm).
Важно: При развёртывании приложения всегда используйте composer install --no-dev --optimize-autoloader, чтобы избежать установки ненужных в продакшене пакетов и ускорить автозагрузку.