如何只更新一个作曲家依赖项?

2022-08-30 11:01:19

我本以为

composer update videlalvaro/php-amqplib

只会更新一个依赖项,但相反,它会更新所有依赖项。

我错过了什么?

PS:此依赖项定义为"videlalvaro/php-amqplib": "2.2.0"composer.json

PPS:使用的作曲家版本是3da05c68f9561fa822c522b1815435ff990493ff 2013-10-02 14:25:06

PPPS:实际输出:

$ composer.phar update videlalvaro/php-amqplib --no-dev
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
    - symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
    - Installation request for symfony/icu == 1.2.0.0 -> satisfiable by symfony/icu[v1.2.0].

答案 1

该命令仅更新该依赖项。但是,它不会禁用 Composer 所做的其他依赖项检查。composer update videlalvaro/php-amqplib

错误消息所抱怨的是lib-icu在您的系统上不可用。显然,这可以通过安装PHP国际扩展来解决。

如果您在某个需要 PHP 5.5 的项目上执行了作曲家更新,降级到 PHP 5.4,然后在不需要 PHP 5.5 的单独要求上运行 Composer 更新,那么您也会看到类似的问题。即使您不会更新需要 PHP 5.5 的需求,该软件包的要求也无法解析,因此 Composer 将失败。

在你的情况下,即使你只是尝试更新到最新版本,也不满足 的要求,因此作曲家更新失败。videlalvaro/php-amqplibsymfony/icu

编辑

为了提供帮助,我猜您在上次进行更新后重新安装了PHP,并且删除或忘记安装PHP国际扩展。Composer 无法令人满意地满足 composer.json 正在设置的要求,因此默认不执行任何操作,而不是故意在不满足要求的情况下进行更新。

因此,基本上,您需要安装运行现有已安装软件所需的PHP扩展,然后Composer将能够更新要更新的单个包,并满足其他包的要求。


答案 2

tl;dr:

您可以在一个命令中列出多个要更新的依赖项:

composer update one/dependency second/dependency other/dependency

故事:

如果只想更新一个依赖项 (),则可能会遇到由于某些其他依赖项安装在错误版本中而无法满足请求的问题。而且那个不一定必须列在你的,它可能只是一些其他依赖关系的依赖关系。composer update some/dependencycomposer.json

例如,我只想更新,但打电话抱怨,(apiclient的依赖性)在版本中需要。我已经安装了。未在我的 .我所要做的是打电话给:google/apiclientcomposer update google/apiclientgoogle/authguzzlehttp/psr71.2.31.3.0guzzlehttp/psr7composer.json

composer update guzzlehttp/psr7 google/apiclient

就是这样!只需更新您想要的软件包,如果作曲家告诉您,您需要更新(或降级:-))其他软件包,请在命令中列出它。


推荐