В чем разница между разделами require и require-dev в composer.json? - программирование
Подтвердить что ты не робот

В чем разница между разделами require и require-dev в composer.json?

Я начинаю использовать композитор, я так мало знаю об этом и немного разбираюсь в разработке веб-приложений.

Я просто просматриваю 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", будет загружаться и устанавливаться только с установкой композитора --dev?
  • Я прочитал некоторую документацию композитора, но до сих пор не понимаю, в чем причина того, что у нас есть часть "require-dev"? Это из-за того, что мы хотим получить конкретную версию пакета, а не всегда получать последнюю стабильную версию?
4b9b3361

Ответ 1

Различные среды

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

  • development
  • testing
  • staging
  • production

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

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

  • staging
  • production

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

  • developing
  • testing

среды.

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

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

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

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

$ composer install

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

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

$ composer install --no-dev

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

Семантика

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

  • require
  • require-dev

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

$ composer install

или

$ composer install --no-dev

Вот и все.

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

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

Ответ 2

  • В соответствии с руководство для композитора:

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

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

    Таким образом, запуск composer install также загрузит зависимости развития.

  • Причина на самом деле довольно проста. При внесении вклада в конкретную библиотеку вы можете запускать тестовые пакеты или другие инструменты разработки (например, symfony). Но если вы установите эту библиотеку в проект, эти зависимости могут не потребоваться: не для каждого проекта требуется тестовый бегун.

Ответ 3

С сайта композитора (это достаточно ясно)

требуется #

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

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

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

Используя require-dev в Composer, вы можете объявить зависимости, необходимые для разработки/тестирования проекта, но не нуждающиеся в производстве. Когда вы загружаете проект на ваш производственный сервер (используя git), часть require-dev будет проигнорирована.

Также проверьте этот ответ, опубликованный автором и этот пост.

Ответ 4

требуется раздел В этом разделе содержатся пакеты/зависимости, которые являются лучшими кандидатами для установки/требуются в рабочей среде.

require-dev раздел: В этом разделе содержатся пакеты/зависимости, которые разработчик может использовать для тестирования кода (or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)

Ответ 5

Общее правило заключается в том, что вы хотите, чтобы пакеты из секции require-dev были только в средах разработки (dev), например, в локальной среде.

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

В промежуточной и производственной среде, возможно, вам нужны только пакеты из раздела require.

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

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

  1. скорость
  2. возможность публикации некоторой информации об отладке
  3. и т.д

Некоторые хорошие кандидаты на 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