В чем разница между разделами 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"
}



  1. все, что появляется в части "require-dev", будет загружено и установлено только с composer install --dev?

  2. Я читал некоторые из документации композитора, но до сих пор не понимаю, что причина, по которой у нас есть часть "require-dev"? Это потому, что мы хотим получить конкретные версия пакета, а всегда получать последнюю стабильную версию?

538   5  

5 ответов:

Различных Средах

как правило, программное обеспечение будет работать в различных средах:

  • development
  • testing
  • staging
  • production

разные зависимости в разных средах

зависимости, которые объявлены в на composer.json обычно это зависимости, которые необходимы для запуска приложения или пакета в

  • staging
  • production

среды, тогда как зависимости, объявленные в require-dev раздел, как правило, зависимости, которые требуются в

  • developing
  • testing

окружающая среда.

например, в дополнение к пакетам, используемым для фактического запуска приложения, могут потребоваться пакеты для разработки программного обеспечения, такие как как:

  • friendsofphp/php-cs-fixer (для обнаружения и устранения проблем со стилем кодирования)
  • squizlabs/php_codesniffer (для обнаружения и устранения проблем со стилем кодирования)
  • phpunit/phpunit (для управления разработкой с помощью тестов)
  • etc.

развертывание

теперь,development и testing среды, вы обычно запускаете

$ composer install

установить как production и development зависимостей.

однако, в staging и production среды, вы только хотите установить зависимости, которые необходимы для запуска приложения, и как часть процесса развертывания, вы обычно запускаете

$ composer install --no-dev

установить только production зависимостей.

семантика

другими словами, разделы

  • require
  • require-dev

указать composer какие пакеты должны быть установлены при беги

$ composer install

или

$ composer install --no-dev

вот и все.

Примечание зависимости разработки пакетов, от которых зависит ваше приложение или пакет, никогда не будут установлены

Для справки, см.:

  1. по данным автора:

    require-dev (root-only)

    перечисляет пакеты, необходимые для разработки этого пакета или выполнения тестов и т. д. Требования к разработчикам корневого пакета устанавливаются по умолчанию. Оба install или update поддержка --no-dev параметр, который предотвращает установку зависимостей dev.

    и composer install также скачать зависимости развития.

  2. причина на самом деле довольно просто. При внесении вклада в определенную библиотеку вы можете запустить наборы тестов или другие инструменты разработки (например, 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, но, вероятно, вы хотите запустить этот только в постановка и производства среды не на локальном.

теоретически вы можете поместить все пакеты в требуются раздел и ничего не произойдет, но вы не хотите разрабатывать пакеты на производстве окружающая среда по следующим причинам:

  1. скорость
  2. потенциал разоблачения некоторой отладочной информации
  3. 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

    Ничего не найдено.