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

Что такое require-dev в composer.json?

1.0 Junior🔥 201 комментариев
#Composer и PSR

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое require-dev в composer.json?

Файл composer.json является центральным манифестом для управления зависимостями в проектах PHP, использующих Composer. В нем есть два ключевых раздела для объявления зависимостей: require и require-dev. Понимание их различий критически важно для правильной организации проекта.

Основное предназначение require-dev

Раздел require-dev предназначен для объявления зависимостей, которые необходимы только во время разработки, тестирования или на стадии CI/CD (Continuous Integration/Continuous Deployment), но не требуются в реальной, рабочей (production) среде приложения.

Эти пакеты не являются частью бизнес-логики или рабочего функционала вашего приложения. Их цель — помочь разработчикам и автоматизированным процессам.

Типичные пакеты, указываемые в require-dev

  • Инструменты для тестирования: PHPUnit, Pest, Codeception для модульного, интеграционного и функционального тестирования.
  • Статические анализаторы: PHPStan, Psalm для глубокого анализа кода и поиска потенциальных ошибок.
  • Инструменты для форматирования и стиля кода: PHP_CodeSniffer (phpcs) для проверки стандартов кодирования, PHP-CS-Fixer для автоматического исправления стиля.
  • Фреймворки для разработки: Symfony's web-server-bundle для локального сервера, Laravel's tinker для интерактивной работы.
  • Инструменты для фабрик данных: Faker для генерации фиктивных данных при тестировании.
  • Пакеты для профилирования и дебаггинга: symfony/debug, barryvdh/laravel-debugbar для отладки в режиме разработки.
  • Инструменты для документации: phpdocumentor/phpdocumentor для генерации API-документации из кода.

Ключевая разница между require и require-dev

  • require: Пакеты, объявленные здесь, являются обязательными для работы вашего приложения в любой среде (development, staging, production). Они будут установлены всегда при выполнении composer install. Пример: symfony/http-kernel, laravel/framework, guzzlehttp/guzzle.
  • require-dev: Пакеты, объявленные здесь, являются опциональными для рабочей среды. Их установка управляется флагами команд Composer и переменой окружения.

Как работает установка и управление

Поведение Composer определяется флагом --no-dev и переменной окружения COMPOSER_NO_DEV.

# Базовая команда install без флага устанавливает ВСЕ зависимости,
# включая require-dev. Это используется для локальной разработки.
composer install

# Флаг --no-dev говорит Composer игнорировать раздел require-dev.
# Это используется при подготовке кода для production.
composer install --no-dev

# Команда update по умолчанию также обновляет dev-пакеты.
composer update
composer update --no-dev

В рабочей среде (например, на сервере после деплоя через CI/CD) почти всегда используется composer install --no-dev, чтобы избежать установки ненужных инструментов, что уменьшает размер дистрибутива, снижает потенциальные риски безопасности от дополнительных пакетов и может немного ускорить установку.

Практический пример composer.json

{
    "name": "acme/my-project",
    "require": {
        "php": "^8.1",
        "laravel/framework": "^10.0",
        "aws/aws-sdk-php": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^10.0",
        "fakerphp/faker": "^1.9",
        "phpstan/phpstan": "^1.0",
        "nunomaduro/collision": "^7.0"
    },
    "autoload": {
        "psr-4": {
            "Acme\\MyProject\\": "src/"
        }
    }
}

Важные нюансы и рекомендации

  1. Конфликты версий: Composer разрешает зависимости для всего проекта единым образом. Пакеты из require и require-dev должны иметь совместимые версии, так как они устанавливаются в одно и то же виртуальное окружение.
  2. Автолоадер: Dev-пакеты также добавляют свои классы в автолоадер Composer при установке без флага --no-dev. Это позволяет, например, классам PHPUnit быть доступными во время тестирования.
  3. Безопасность: Строгое разделение помогает соблюдать принцип минимализма в production. Многие dev-пакеты имеют доступ к внутренней структуре или могут выполнять произвольный код, что нежелательно на рабочем сервере.
  4. Совместная работа: Использование require-dev позволяет команде стандартизировать набор инструментов для разработки (например, определенную версию PHPStan), обеспечивая единое качество кода.

Таким образом, require-dev — это мощный инструмент организации, который позволяет четко отделить инструменты, необходимые для создания и проверки кода, от библиотек, которые являются частью самого работающего продукта. Его правильное использование — признак зрелого и хорошо структурированного проекта.

Что такое require-dev в composer.json? | PrepBro