Composer: require-dev не переопределяет требование в composer.json

Созданный на 29 февр. 2016  ·  3Комментарии  ·  Источник: composer/composer

Привет,
Я пытался использовать require-dev в своей локальной среде и в своей среде UAT, но каждый раз, когда я использую «обновление композитора», я получаю ошибки, если у меня есть некоторые пакеты в require-dev, переопределяющие требуемые пакеты.
Вот пример моего composer.json:

... "require": {
        "php": ">=5.5.0",
        "wp/wordpress": "4.4.2",
        "wp/amazon-web-services": "0.2.2",
        "wp/members": "^1.0.2",
        "wp/nextgen-gallery-custom-fields": "^1.2.4",
        "wp/wpml-string-translation": "^2.2.6",
        "wp/sitepress-multilingual-cms": "^3.2.7",
        "wp/wpml-translation-management": "^2.0.5"
},
    "require-dev": {
        "wp/wp-functional-tests": "^1.0.0",
    "wp/sitepress-multilingual-cms": "dev-testing-3.3.6",
    "wp/wpml-string-translation": "dev-testing-2.3.6.1",
        "wp/wpml-translation-management": "dev-testing-2.1.5"
}, ...

когда я запускаю обновление композитора, я получаю эту ошибку:

Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Updating wp/wpml-string-translation (2.3.2 => dev-testing-2.3.6.1 ddc3c6b)
    Checking out ddc3c6b3923fe47deda4d8d....

  - Updating wp/sitepress-multilingual-cms (3.3.1 => dev-testing-3.3.6 164cab6)
    Checking out 164cab6c3c756ba031c58a3....



  [Composer\DependencyResolver\SolverProblemsException]
    Problem 1
      - The requested package wp/wpml-string-translation ^2.2.6 could not be found.
    Problem 2
      - The requested package wp/sitepress-multilingual-cms ^3.2.7 could not be found.
    Problem 3
      - The requested package wp/wpml-translation-management ^2.0.5 could not be found.
  Potential causes:
   - A typo in the package name
   - The package is not available in a stable-enough version according to your minimum-stability setting
     see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.
  Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

Я что-то пропустил? Разве require-dev не должен переопределять требуемые плагины? почему он просто не находит мои стабильные версии? (это, конечно, найти, если я не использую require-dev)

Большое спасибо

Самый полезный комментарий

Итак, что мне делать, если я хочу использовать непрерывную интеграцию и собрать свой пакет в другой среде, такой как prod, stage, dev, uat, где для stage и prod требуются стабильные версии, а на uat и dev я хочу протестировать другую? Должен ли я всегда делать разные пакеты отдельно?
Было бы здорово использовать require/require-dev для установления какой-то иерархии (в контексте непрерывной интеграции).

Все 3 Комментарий

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

Итак, что мне делать, если я хочу использовать непрерывную интеграцию и собрать свой пакет в другой среде, такой как prod, stage, dev, uat, где для stage и prod требуются стабильные версии, а на uat и dev я хочу протестировать другую? Должен ли я всегда делать разные пакеты отдельно?
Было бы здорово использовать require/require-dev для установления какой-то иерархии (в контексте непрерывной интеграции).

Ваша проблема заключается в рабочем процессе, а не в техническом - вам следует принять рабочий процесс на основе ветвей для поддержки разных этапов разработки. Обычно вы разрабатываете в master , тестируете в ветках версий, таких как 1.0.x , и выпускаете в теги. Git упрощает этот рабочий процесс, объединяя ветки задач в master и фиксируя в master обратно в ветки версии. Инструменты CI, такие как Travis, готовы к мониторингу всех веток и новых тегов для данного репозитория. Поскольку у вас могут быть разные версии composer.json в каждом коммите и ветке, это сразу решает вашу проблему.

В оставшихся редких случаях, когда вы хотели бы иметь несколько разных экземпляров composer.json , например, для тестирования развертывания со всеми установленными предлагаемыми пакетами, вы могли бы просто иметь еще один, например, composer-with-suggests.json и использовать COMPOSER переменная окружения :

COMPOSER=composer-with-suggest.json composer install
Была ли эта страница полезной?
0 / 5 - 0 рейтинги