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

Что делает флаг --dev?

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

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

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

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

Что делает флаг --dev в PHP-проектах?

Флаг --dev — это ключевой параметр, используемый преимущественно в контексте Composer (менеджера зависимостей PHP) для управления установкой пакетов, которые необходимы только в среде разработки, а не в production-окружении.

Основное назначение

Когда вы выполняете команду composer install --dev или composer require --dev, Composer устанавливает пакеты, перечисленные в разделе require-dev файла composer.json. Эти зависимости обычно включают:

  • Инструменты тестирования (PHPUnit, Codeception, PHPSpec).
  • Статические анализаторы кода (PHPStan, Psalm, Phan).
  • Инструменты для проверки стиля кода (PHP_CodeSniffer, PHP-CS-Fixer).
  • Фреймворки для профилирования и отладки (Tideways, Blackfire).
  • Документационные генераторы (phpDocumentor, Sami).
  • Локальные серверы или симуляторы (Mock-сервисы).

Ключевые аспекты работы с --dev

  1. Разделение зависимостей по окружениям
    Файл `composer.json` структурирует зависимости двумя основными разделами:
```json
{
    "require": {
        "symfony/http-foundation": "^6.0",
        "monolog/monolog": "^2.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^10.0",
        "symfony/var-dumper": "^6.0"
    }
}
```
    Пакеты из `require` устанавливаются **всегда**, а из `require-dev` — только при указании флага `--dev`.

  1. Оптимизация production-окружения
    В production рекомендуется устанавливать зависимости **без** dev-пакетов для:
    *   **Уменьшения размера кодовой базы** и времени развёртывания.
    *   **Снижения потенциальных уязвимостей** (dev-инструменты могут содержать уязвимости или быть точкой входа для атак).
    *   **Ускорения работы автозагрузчика** (меньше классов для сканирования).

    Стандартная команда для production:
```bash
composer install --no-dev --optimize-autoloader
```

3. Влияние на команды Composer

    *   `composer install` — по умолчанию устанавливает **все** зависимости (и `require`, и `require-dev`). Флаг `--no-dev` исключает dev-пакеты.
    *   `composer require` — добавляет пакет в `require`. С флагом `--dev` добавляет в `require-dev`.
```bash
# Добавить пакет только для разработки
composer require --dev phpstan/phpstan

# Добавить основной пакет
composer require guzzlehttp/guzzle
```
    *   `composer update` — по умолчанию обновляет все пакеты. С флагом `--no-dev` обновляет только основные.

  1. Определение окружения в runtime
    Composer предоставляет константу `COMPOSER_DEV_MODE`, которую можно использовать в коде приложения:
```php
if (COMPOSER_DEV_MODE) {
    // Включить расширенную отладку или профилирование
    Symfony\Component\ErrorHandler\Debug::enable();
}
```

Пример рабочего процесса

# 1. Клонируем проект
git clone project.git
cd project

# 2. Устанавливаем ВСЕ зависимости для локальной разработки
composer install

# 3. Запускаем тесты (используем dev-зависимости)
./vendor/bin/phpunit

# 4. Готовим deployment для production
composer install --no-dev --optimize-autoloader --classmap-authoritative

# 5. В production-окружении остаются только основные пакеты:
# symfony/http-foundation, monolog/monolog и т.д.
# phpunit, анализаторы кода и отладчики отсутствуют

Важные нюансы

  • Совместимость версий: Composer проверяет совместимость dev-зависимости с основными пакетами и версией PHP.
  • Наследование в монопакетах (Monorepo): В сложных структурах проектов настройки require-dev могут наследоваться от родительского composer.json.
  • Поведение по умолчанию: В Composer 2.x флаг --dev часто является неявным по умолчанию для команды install в development-окружении, но явное указание улучшает читаемость скриптов.

Использование флага --dev — это лучшая практика, которая способствует поддержанию чистоты production-окружения, безопасности и эффективности развёртывания при сохранении полного инструментария для разработки и тестирования.