Какая разница между 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 , но поведение по умолчанию основано на том, является ли соответствующий пакет корневым пакетом.