it-swarm.com.ru

В чем разница между require и require-dev?

Я новичок в composer и хотел бы узнать разницу между require и require-dev. Веб-сайт composer не дает хорошего объяснения разницы между этими двумя.

Часть, которую я не получаю - Lists packages required for developing this package, or running tests, etc. от Официальные документы Composer.

221
slier

Пакеты require-dev - это пакеты, которые не являются необходимыми для работы вашего проекта и не должны быть включенным в производственную версию вашего проекта.

Как правило, это такие пакеты, как phpunit/phpunit, которые вы будете использовать только во время разработки.

208
Scott Tesler

мне кажется понятным

требовать

Перечисляет пакеты, требуемые этим пакетом. Пакет не будет установлен, если эти требования не будут выполнены.

require-dev (только для root)

Список пакетов, необходимых для разработки этого пакета  (1)или выполнение тестов и т. д. Требования dev для корневого пакета будут установлены только в том случае, если установка выполняется с --dev или если обновление выполняется без --no-dev.

http://getcomposer.org/doc/04-schema.md


1. пакеты, используемые для разработки пакета

52
user557846

Основное различие заключается в том, что Composer будет устанавливать только зависимости require-dev для "корневого пакета" - каталога, в котором вы запускаете composer install. документация описывает это как:

Корневой пакет - это пакет, определенный composer.json в корне вашего проекта. Это основной composer.json, который определяет требования вашего проекта.

… И require-dev документации указывает, что это "только для root".

На практике это означает, что зависимости пакета require-dev не используются, если пакет устанавливается как зависимость для чего-то другого (т.е. он устанавливается в папку vendor другого проекта).

Так что если у вас есть phpunit в списке require-dev для YourProject , и я клонирую YourProject и запускаю composer install в каталоге yourproject/, Composer установит phpunit в yourproject/vendor/, потому что, скорее всего, я занимаюсь разработкой над YourProject . В рамках разработки я, вероятно, захочу запустить набор тестов YourProject , и для этого мне понадобится phpunit.

Но если я добавлю YourProject в качестве зависимости MyProject , установка пакета myproject также установит пакет yourproject, но он не установит phpunit.

Вы можете переопределить это поведение с помощью --dev и --no-devoptions , но поведение по умолчанию основано на том, является ли соответствующий пакет корневой пакет .

37
Nathan Craike