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