Привет,
Я пытался использовать 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)
Большое спасибо
Это не переопределение, нет, это слияние двух, поэтому, если они не совпадают, это создает проблему. Требование чего-либо как в 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
Самый полезный комментарий
Итак, что мне делать, если я хочу использовать непрерывную интеграцию и собрать свой пакет в другой среде, такой как prod, stage, dev, uat, где для stage и prod требуются стабильные версии, а на uat и dev я хочу протестировать другую? Должен ли я всегда делать разные пакеты отдельно?
Было бы здорово использовать require/require-dev для установления какой-то иерархии (в контексте непрерывной интеграции).