Что делает флаг —dev в Composer?

Ответ

Флаг --dev (или его отсутствие) в Composer управляет установкой зависимостей, указанных в разделе require-dev файла composer.json. Эти зависимости обычно включают инструменты для разработки и тестирования, которые не требуются в production-окружении.

Структура composer.json:

{
    "require": {
        "symfony/http-kernel": "^6.0",
        "doctrine/orm": "^2.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.0",
        "symfony/var-dumper": "^6.0",
        "roave/security-advisories": "dev-latest"
    }
}

Команды и их поведение:

  • composer install или composer install --dev — устанавливает ВСЕ зависимости, включая require-dev (поведение по умолчанию для локальной разработки).
  • composer install --no-dev — устанавливает ТОЛЬКО основные зависимости из require, игнорируя require-dev. Это используется на production-серверах для уменьшения размера vendor и ускорения autoload.
  • composer update --dev — обновляет только dev-зависимости.
  • composer update --no-dev — обновляет только основные зависимости.

Типичные dev-зависимости: инструменты тестирования (PHPUnit, Pest), статические анализаторы (PHPStan, Psalm), отладчики (Xdebug), фикстуры данных (Faker), и инструменты для код-стайла (PHP-CS-Fixer).

Ответ 18+ 🔞

А, ну вот, объясняю про этот самый --dev флаг в Composer, чтоб ты не путался, как последний распиздяй. Представь, что твой composer.json — это такой бардак в квартире. В require лежит всё нужное для жизни: холодильник, кровать, микроволновка. А в require-dev — это твой хлам для хобби: гитара, которую ты не умеешь играть, набор для выжигания по дереву и три коробки старых журналов. Для жизни — не нужно, но выкинуть жалко, а иногда и полезно.

Вот смотри, как это в коде выглядит, тут всё честно:

{
    "require": {
        "symfony/http-kernel": "^6.0",
        "doctrine/orm": "^2.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.0",
        "symfony/var-dumper": "^6.0",
        "roave/security-advisories": "dev-latest"
    }
}

Видишь? Основное — ядро и ORM. А в дев-зависимостях — PHPUnit для тестов, var-dumper чтобы смотреть, что там внутри переменных твоих накуролесилось, и адвайзори для безопасности, чтоб не просрать проект как последний лох.

Теперь команды, тут важно не облажаться:

  • composer install или composer install --dev — это как приехать на квартиру и разложить весь свой скарб. И холодильник, и гитару, и журналы. По умолчанию так и есть, для разработки — то, что надо. Установит всё, включая dev-пакеты.
  • composer install --no-dev — а это уже серьёзно. Это как собрать только зубную щётку, носки и паспорт, и свалить в отпуск. На продакшн-сервере именно так и делают: ставят только то, без чего проект реально не запустится (require). Автолоад быстрее, вендор меньше, мусора нет. Красота.
  • composer update --dev — обновляет только твой хобби-хлам. Гитару на новую поменял, журналы выкинул. Основные пакеты (require) не трогает.
  • composer update --no-dev — работает только с серьёзными вещами из require. Хлам остаётся как есть, хоть там плесенью прорастай.

А что обычно в этот require-dev пихают? Да всякую хуиту, которая в бою не нужна, но без неё в разработке — пиздец как неудобно.

  • Инструменты тестирования (PHPUnit, Pest) — чтобы твой код не был говном, которое развалится от первого же чиха.
  • Статические анализаторы (PHPStan, Psalm) — это такие зануды, которые будут орать на тебя за каждую опечатку и потенциальный баг. Удивление пиздец, когда они находят косяки.
  • Отладчики (Xdebug) — чтобы не гадать, на каком именно хуе твой скрипт лег с ошибкой.
  • Фикстуры (Faker) — чтобы нагенерить тестовых данных: пользователей, товаров. Чисто для отмазки, типа «у меня база большая».
  • Инструменты для код-стайла (PHP-CS-Fixer) — чтобы код выглядел не как писали его обезьяны, а хотя бы прилично.

Короче, суть в чём: --no-dev — для прода, когда нужно быстро и чисто. Без флага — для локалки, когда можно позволить себе весь этот бардак для удобства. Главное — не перепутай, а то на сервере тесты запускать будешь, ёпта.