你好,
我试图在我的本地环境和我的 UAT 环境中使用 require-dev,但是每次我使用“composer update”时,如果我在 require-dev 中有一些包覆盖 require 包,我都会收到错误消息。
这是我的 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 插件吗? 为什么它只是找不到我的稳定版本? (如果我没有使用require-dev,那当然会发现)
非常感谢
它不是压倒一切的,而是将两者合并,所以如果它们不匹配就会产生问题。 在 require 和 require-dev 中都需要某些东西并不是真正受支持的用例,而且很可能会导致问题。 我建议您只选择一个包是否仅用于开发,然后只列出一次。
那么,如果我想使用持续集成并在不同的环境(如 prod、stage、dev、uat)上构建我的包,其中 stage 和 prod 需要稳定版本,而我想在 uat 和 dev 上测试不同的版本,我该怎么办? 我应该总是单独做不同的包裹吗?
最好使用 require/require-dev 来建立某种层次结构(在持续集成环境中)
您的问题在于工作流程,而不是技术问题 - 您应该采用基于分支的工作流程来维护不同的开发阶段。 通常你在master
中开发,在1.0.x
等版本分支中进行测试,然后发布到标签。 Git 通过将问题分支合并到master
并在 master 中提交回版本分支来简化该工作流程。 像 Travis 这样的 CI 工具已准备好监视给定存储库的所有分支和新标签。 由于您可以在每个提交和分支中使用不同版本的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 来建立某种层次结构(在持续集成环境中)