如何让composer自动解决不是真正冲突的冲突?
How to let composer automatically resolve conflicts that are not real conflicts?
composer 经常告诉我它不能安装某种包,因为它(的依赖项)与我已经安装的东西冲突。我常常搞不清冲突的正反面,但今天再次发生时,我仔细研究了一下,发现根本没有真正的冲突。
我想安装一个包,composer 说我想要的包依赖于 doctrine/inflector
版本 1.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 使其尝试自行解决这些冲突?因为我确信有更复杂的场景,我无法弄清楚该怎么做,但作曲家如果愿意尝试的话可能可以。
我在该站点上进行了一些搜索,发现 composer update
可能对我有所帮助,但我仍然很想知道是否有更好的选择。你看,我正在寻找一种方法,其中 我 不需要知道哪些包需要更新(而且我也不需要更新我所有的包)。
您可以使用这些标志 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.
遇到了完全相同的问题。这似乎是作曲家 1 的不良行为。
切换到 composer 2 解决了这个问题,选项 --update-with-all-dependencies (-W) 完成了它的工作!
否则,对于 composer 1,唯一的解决方案似乎是您所做的:手动更新依赖项、子依赖项、子子...并在最后 composer.json 中删除它们。
composer 经常告诉我它不能安装某种包,因为它(的依赖项)与我已经安装的东西冲突。我常常搞不清冲突的正反面,但今天再次发生时,我仔细研究了一下,发现根本没有真正的冲突。
我想安装一个包,composer 说我想要的包依赖于 doctrine/inflector
版本 1.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 使其尝试自行解决这些冲突?因为我确信有更复杂的场景,我无法弄清楚该怎么做,但作曲家如果愿意尝试的话可能可以。
我在该站点上进行了一些搜索,发现 composer update
可能对我有所帮助,但我仍然很想知道是否有更好的选择。你看,我正在寻找一种方法,其中 我 不需要知道哪些包需要更新(而且我也不需要更新我所有的包)。
您可以使用这些标志 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.
遇到了完全相同的问题。这似乎是作曲家 1 的不良行为。
切换到 composer 2 解决了这个问题,选项 --update-with-all-dependencies (-W) 完成了它的工作!
否则,对于 composer 1,唯一的解决方案似乎是您所做的:手动更新依赖项、子依赖项、子子...并在最后 composer.json 中删除它们。