Ответ
Флаг --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 — для прода, когда нужно быстро и чисто. Без флага — для локалки, когда можно позволить себе весь этот бардак для удобства. Главное — не перепутай, а то на сервере тесты запускать будешь, ёпта.