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