Я новичок в composer
и мне хотелось бы узнать разницу между require
и require-dev
. На сайте композитора нет хорошего объяснения различий между этими двумя.
Часть, которую я не получаю, представляет собой Lists packages required for developing this package, or running tests, etc.
Из официальных документов Composer.
Пакеты require-dev
– это пакеты, которые не нужны для работы вашего проекта и не должны включаться в производственную версию вашего проекта.
Как правило, это пакеты, такие как phpunit/phpunit
которые вы будете использовать для модульного тестирования вашего проекта.
мне кажется ясным:
требовать
Перечисляет пакеты, требуемые этим пакетом. Пакет не будет установлен, если эти требования не будут выполнены.
require-dev (только для root)
Перечисляет пакеты, необходимые для разработки этого пакета (1) или запускает тесты и т. Д. Требования разработчика корневого пакета будут установлены только в том случае, если установка выполняется с
--dev
или если обновление выполняется без--no-dev
.
http://getcomposer.org/doc/04-schema.md
1. пакеты, используемые для разработки пакета
Основное различие заключается в том, что Composer будет устанавливать только зависимости require-dev
для «корневого пакета» – каталога, в котором вы запускаете composer install
. Документация описывает это как:
Корневой пакет – это пакет, определенный
composer.json
в корне вашего проекта. Это основнойcomposer.json
который определяет ваши требования к проекту.
… и документация require-dev
указывает, что она «только для root».
На практике это означает, что зависимостей require-dev
пакета не используются, если пакет устанавливается как зависимость для чего-то другого (то есть он установлен в папку vendor
другого проекта).
Поэтому, если у вас есть phpunit
в списке require-dev
для YourProject , и я клонирую ваш проект и запускаю composer install
в yourproject/
, Composer будет устанавливать phpunit
для yourproject/vendor/
, потому что, скорее всего, я делаю некоторую разработку на YourProject , В рамках разработки я, вероятно, захочу запустить тестовый набор YourProject , и для этого мне понадобится phpunit
.
Но если я добавлю ваш проект как зависимость от MyProject , установка пакета myproject
также установит пакет yourproject
, но он не установит phpunit
.
Вы можете переопределить это поведение с параметрами --dev
и --no-dev
, но поведение по умолчанию основано на том, является ли соответствующий пакет корневым пакетом .