В чем разница между разделами require и require-dev в composer.в JSON?
Я начинаю использовать composer, я так мало знаю об этом и имею небольшой опыт разработки веб-приложений.
Я просто прохожу через Nettuts + Tutorial, так что у меня есть основной вопрос о композиторе.
{
"require": {
"laravel/framework": "4.0.*",
"way/generators": "dev-master",
"twitter/bootstrap": "dev-master",
"conarwelsh/mustache-l4": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "3.7.*",
"mockery/mockery": "0.7.*"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-update-cmd": "php artisan optimize"
},
"minimum-stability": "dev"
}
- все, что появляется в части "require-dev", будет загружено и установлено только с composer install --dev?
- Я читал некоторые из документации композитора, но до сих пор не понимаю, что причина, по которой у нас есть часть "require-dev"? Это потому, что мы хотим получить конкретные версия пакета, а всегда получать последнюю стабильную версию?
5 ответов:
Различных Средах
как правило, программное обеспечение будет работать в различных средах:
developmenttestingstagingproductionразные зависимости в разных средах
зависимости, которые объявлены в на
composer.jsonобычно это зависимости, которые необходимы для запуска приложения или пакета в
stagingproductionсреды, тогда как зависимости, объявленные в
require-devраздел, как правило, зависимости, которые требуются в
developingtestingокружающая среда.
например, в дополнение к пакетам, используемым для фактического запуска приложения, могут потребоваться пакеты для разработки программного обеспечения, такие как как:
friendsofphp/php-cs-fixer(для обнаружения и устранения проблем со стилем кодирования)squizlabs/php_codesniffer(для обнаружения и устранения проблем со стилем кодирования)phpunit/phpunit(для управления разработкой с помощью тестов)- etc.
развертывание
теперь,
developmentиtestingсреды, вы обычно запускаете$ composer installустановить как
productionиdevelopmentзависимостей.однако, в
stagingиproductionсреды, вы только хотите установить зависимости, которые необходимы для запуска приложения, и как часть процесса развертывания, вы обычно запускаете$ composer install --no-devустановить только
productionзависимостей.семантика
другими словами, разделы
requirerequire-devуказать
composerкакие пакеты должны быть установлены при беги$ composer installили
$ composer install --no-devвот и все.
Примечание зависимости разработки пакетов, от которых зависит ваше приложение или пакет, никогда не будут установлены
Для справки, см.:
по данным автора:
require-dev (root-only)
перечисляет пакеты, необходимые для разработки этого пакета или выполнения тестов и т. д. Требования к разработчикам корневого пакета устанавливаются по умолчанию. Оба
installилиupdateподдержка--no-devпараметр, который предотвращает установку зависимостей dev.и
composer installтакже скачать зависимости развития.причина на самом деле довольно просто. При внесении вклада в определенную библиотеку вы можете запустить наборы тестов или другие инструменты разработки (например, symfony). Но если вы установите эту библиотеку в проект, эти зависимости разработки могут не потребоваться: не каждый проект требует запуска теста.
С сайта композитора (это достаточно очевидно)
require#
перечисляет пакеты, необходимые для этого пакета. Пакета не будет устанавливается, если эти требования не могут быть выполнены.
require-dev (root-only)#
перечисляет пакеты, необходимые для разработки этого пакета или выполнения тестов, так далее. Требования к разработчику корневого пакета устанавливаются по умолчанию. Как установка, так и обновление поддерживают параметр --no-dev, который предотвращает зависимостей Дев могут быть установлены.
С помощью require-dev в Composer вы можете объявить зависимости, которые вам нужны для разработки/тестирования проекта, но не нужны в производстве. При загрузке проекта на рабочий сервер (используем git)
require-devчасть будет игнорироваться.также проверьте этот ответ, опубликованный автор и этот пост как хорошо.
требуются раздел Этот раздел содержит пакеты / зависимости, которые лучше всего подходят для установки / требуются в рабочей среде.
раздел require-dev: этот раздел содержит пакеты / зависимости, которые могут быть использованы разработчиком для тестирования ее кода
(or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)
общее правило заключается в том, что вы хотите пакеты от require-dev раздел только в средах разработки (dev), например локальная среда.
пакетов require-dev раздел-это пакеты, которые помогают вам отлаживать приложение, запускать тесты и т. д.
At постановка и производства среде, вы, вероятно, хотите только пакеты от требуются.
но в любом случае вы можете запустить композитор установить --no-dev и обновление композитора --no-dev в любой среде команда установит только пакеты из требуются не из require-dev, но, вероятно, вы хотите запустить этот только в постановка и производства среды не на локальном.
теоретически вы можете поместить все пакеты в требуются раздел и ничего не произойдет, но вы не хотите разрабатывать пакеты на производстве окружающая среда по следующим причинам:
- скорость
- потенциал разоблачения некоторой отладочной информации
- etc
некоторые хорошие кандидаты для require-dev являются :
"filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^2.0", "phpunit/phpunit": "^7.0"вы можете увидеть, что делают вышеуказанные пакеты, и вы увидите, почему они вам не нужны на производстве.
подробнее здесь:https://getcomposer.org/doc/04-schema.md
Comments