Composer: require-dev 没有覆盖 composer.json 中的 require

创建于 2016-02-29  ·  3评论  ·  资料来源: composer/composer

你好,
我试图在我的本地环境和我的 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,那当然会发现)

非常感谢

Support

最有用的评论

那么,如果我想使用持续集成并在不同的环境(如 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 中提交回版本分支来简化该工作流程。 像 Travis 这样的 CI 工具已准备好监视给定存储库的所有分支和新标签。 由于您可以在每个提交和分支中使用不同版本的composer.json ,因此可以立即解决您的问题。

在极少数情况下,您希望拥有几个不同的composer.json实例,例如要测试安装了所有建议包的部署,您可以只使用另一个类似composer-with-suggests.json使用COMPOSER环境变量

COMPOSER=composer-with-suggest.json composer install
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

djmattyg007 picture djmattyg007  ·  49评论

stevenobird picture stevenobird  ·  48评论

StepanyanAlbert picture StepanyanAlbert  ·  75评论

mlocati picture mlocati  ·  55评论

omerbsh picture omerbsh  ·  64评论