← Назад к вопросам
В чем разница между require и require-dev?
1.0 Junior🔥 181 комментариев
#Composer и PSR#PHP Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между require и require-dev в composer.json
require — это зависимости для production (рабочего окружения). require-dev — зависимости только для разработки.
Основная концепция
{
"require": {
"php": ">=8.0",
"laravel/framework": "^10.0",
"doctrine/orm": "^2.0"
},
"require-dev": {
"phpunit/phpunit": "^10.0",
"laravel/tinker": "^2.0",
"phpstan/phpstan": "^1.0"
}
}
require: нужны для работы приложения в production require-dev: нужны только для разработки (тесты, статический анализ)
Когда использовать
В require идут:
- Frameworks (Laravel, Symfony)
- Database drivers (MySQL, PostgreSQL)
- Authentication libraries
- HTTP clients
- Всё, что нужно для работы app
В require-dev идут:
- PHPUnit (testing)
- PHPStan (code analysis)
- PHP_CodeSniffer (linting)
- Xdebug (debugging)
- Faker (data generation for tests)
Установка
# Установить как обычную зависимость
composer require laravel/framework
# Добавляется в require
# Установить как dev зависимость
composer require --dev phpunit/phpunit
# Добавляется в require-dev
Production vs Development
# На production сервере
composer install --no-dev
# Устанавливает только require, пропускает require-dev
# При разработке
composer install
# Устанавливает require + require-dev
# При обновлении
composer update --no-dev
# Обновляет только production зависимости
Файл composer.lock
Оба типа зависимостей записываются в composer.lock с версиями. Это гарантирует, что все разработчики используют одни версии.
Размер и скорость
# C require-dev: много зависимостей
composer install
# Загружает phpunit, phpstan, etc.
# Без require-dev: меньше файлов
composer install --no-dev
# Быстрее, меньше места на диске
# Используется на production сервере
CI/CD Pipeline
# .gitlab-ci.yml
test:
script:
- composer install # С dev зависимостями
- ./vendor/bin/phpunit # Запускаем тесты
- ./vendor/bin/phpstan analyse # Статический анализ
deploy:
script:
- composer install --no-dev # Только production
- php artisan migrate
Real-world example
{
"name": "my-app",
"require": {
"php": ">=8.1",
"laravel/framework": "^11.0",
"laravel/eloquent-relationships": "^1.0",
"guzzlehttp/guzzle": "^7.0",
"stripe/stripe-php": "^12.0"
},
"require-dev": {
"phpunit/phpunit": "^11.0",
"laravel/sail": "^1.0",
"laravel/dusk": "^8.0",
"phpstan/phpstan": "^1.10",
"php-cs-fixer/php-cs-fixer": "^3.0",
"mockery/mockery": "^1.6"
}
}
Best Practices
- require — только то, что нужно для production
- require-dev — тесты, linters, debuggers
- Никогда не используй require-dev пакеты в production коде
- На сервере всегда запускай
composer install --no-dev - В CI/CD: тесты с dev, deploy без dev
Вывод
require — зависимости для работы приложения (нужны в production). require-dev — зависимости для разработки (не нужны на сервере). На production сервере используй --no-dev для экономии места и скорости.