我怎么只会更新一个作曲家依赖项


How would I only update one composer dependency?

我期望

composer update videlalvaro/php-amqplib

只会更新一个依赖项,但不会更新所有依赖项。

我错过了什么?

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

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

购买力平价:实际产出:

$ 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].

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

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

如果您在其中一个要求中需要 PHP 5.5 的项目上进行了作曲家更新,

降级到 PHP 5.4,然后在不需要 PHP 5.5 的单独要求上运行作曲家更新,您会看到类似的问题。即使您不会更新需要 PHP 5.5 的需求,该包的需求也无法解决,因此 Composer 将失败。

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

编辑

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

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

tl;dr:

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

composer update one/dependency second/dependency other/dependency

故事:

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

例如,我只想更新并且只更新google/apiclient,但调用composer update google/apiclient抱怨,google/auth(apiclient的依赖项(需要在版本1.2.3guzzlehttp/psr7。我已经安装了1.3.0guzzlehttp/psr7没有列在我的composer.json中。我必须做的,是打电话给:

composer update guzzlehttp/psr7 google/apiclient

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

由于安全原因,我在 GitHub 存储库上遇到了类似的情况。

我解决了将依赖项更新到特定版本的问题,如下所示:

composer require phpseclib/phpseclib:2.0.31

如果您在运行之前使用像 docker 容器(ddev、land 等(这样的虚拟环境,您应该使用以下命令连接到容器:

ddev ssh

要在更新特定软件包期间克服这种依赖关系问题,您应该在完全运行更新之前指定所有特定的软件包版本.
在您的情况下,如下所示:

composer require videlalvaro/php-amqplib:2.2.0 --no-update
composer require symfony/icu:1.2.0 --no-update
composer require lib-icu:4.4 --no-update
composer update videlalvaro/php-amqplib symfony/icu lib-icu