← Назад к вопросам

В чем разница между 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

  1. require — только то, что нужно для production
  2. require-dev — тесты, linters, debuggers
  3. Никогда не используй require-dev пакеты в production коде
  4. На сервере всегда запускай composer install --no-dev
  5. В CI/CD: тесты с dev, deploy без dev

Вывод

require — зависимости для работы приложения (нужны в production). require-dev — зависимости для разработки (не нужны на сервере). На production сервере используй --no-dev для экономии места и скорости.

В чем разница между require и require-dev? | PrepBro