Комментарии (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
- Разделение зависимостей по окружениям
Файл `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`.
- Оптимизация 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` обновляет только основные.
- Определение окружения в 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-окружения, безопасности и эффективности развёртывания при сохранении полного инструментария для разработки и тестирования.