【问题标题】:How to let composer automatically resolve conflicts that are not real conflicts?如何让作曲家自动解决不是真正冲突的冲突?
【发布时间】:2021-03-25 21:07:31
【问题描述】:

composer 经常告诉我它无法安装某种包,因为它(s 依赖项)与我已经安装的东西冲突。通常我无法确定冲突的正面或反面,但当它今天再次发生时,我调查了一下,发现根本没有真正的冲突。

我想安装一个包,composer说我想要的包依赖于doctrine/inflector1.4或更高版本,但我已经安装了doctrine/inflector并锁定在1.3.1

我调查过了,我从来没有明确要求过doctrine/inflector。所以它不是我的应用程序的直接依赖项,而是作为我的两个依赖项的依赖项安装的。这两个依赖项分别表示他们需要doctrine/inflector 版本^1.2^1.0。 (我在我的composer.lock 文件中找到了该信息。)

所以现在我不明白为什么作曲家会大惊小怪。是的,composer过去选择在1.3.1安装doctrine/inflector以满足要求,但是如果composer只是将它过去安装的1.3.1版本更新为1.4.1,则应该没有冲突。但它并没有这样做,而是抱怨冲突。

我现在通过运行这些命令手动解决了冲突:

$ composer require doctrine/inflector:1.4.1
$ composer require illuminate/support
$ composer remove doctrine/inflector

我使用了doctrine remove,因为我不想在我的composer.json 中包含doctrine/inflector

当然,这行得通,但有没有办法配置作曲家,使其尝试自行解决这些冲突?因为我确信在更复杂的场景中我无法弄清楚该怎么做,但如果作曲家尝试一下,它可能会。

我在这个网站上进行了一些搜索,发现 composer update 可能对我有帮助,但我仍然很想知道是否有更好的选择。你看我正在寻找一种方法,不需要知道哪些包需要更新(我也不需要更新我的所有包)。

【问题讨论】:

    标签: composer-php


    【解决方案1】:

    您可以通过composer require 使用这些标志来实现:

    $ composer require --help | grep update-with
          --update-with-dependencies      Allows inherited dependencies to be updated, except those that are root requirements.
          --update-with-all-dependencies  Allows all inherited dependencies to be updated, including those that are root requirements.
    

    【讨论】:

      【解决方案2】:

      遇到了完全相同的问题。这似乎是作曲家 1 的不良行为。

      切换到 composer 2 解决了这个问题,选项 --update-with-all-dependencies (-W) 就可以了!

      否则,使用 composer 1 唯一的解决方案似乎是您所做的:手动更新依赖项、子依赖项、子子-...并在最后在 composer.json 中删除它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-27
        • 2015-05-07
        • 2019-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        相关资源
        最近更新 更多