Composer:删除包,清理依赖项,不更新其他包

2022-08-30 09:01:55

情况

假设我有一个项目,其中包含 Composer 安装的两个包:

php composer.phar require 'squizlabs/php_codesniffer:~2.0' 'phpmd/phpmd:~2.1'

自动生成的文件如下所示:composer.json

{
    "require": {
        "squizlabs/php_codesniffer": "~2.0",
        "phpmd/phpmd": "~2.1"
    }
}

在自动生成的文件中,有两个请求的包:composer.lock

  • 2.0.0 squizlabs/php_codesniffer
  • 2.1.3 phpmd/phpmd

以及以下的四个依赖项:phpmd/phpmd

  • 2.0.4 pdepend/pdepend
  • 2.5.9 symfony/config
  • 2.5.9 symfony/dependency-injection
  • 2.5.9 symfony/filesystem

几天后,版本发布了,但我还不想运行。我现在想留在版本上,也许我会在几天内运行。squizlabs/php_codesniffer2.1.0update2.0.0update


问题

我现在想从我的项目中删除。我想实现以下几点:phpmd/phpmd

  1. 从中删除phpmd/phpmdcomposer.json
  2. 从中删除phpmd/phpmdcomposer.lock
  3. 从文件夹中删除phpmd/phpmdvendor
  4. 从 中删除 的所有依赖项phpmd/phpmdcomposer.lock
  5. 从文件夹中删除 的所有依赖项phpmd/phpmdvendor
  6. 不更新到版本squizlabs/php_codesniffer2.1.0

编辑:我更喜欢一个不需要更改 的版本约束的解决方案squizlabs/php_codesniffercomposer.json


我尝试了什么

如果我运行:

php composer.phar remove phpmd/phpmd

这达到了第1,2,3,6点,但没有达到第4,5点。

的依赖关系 保留在 和 文件夹。phpmd/phpmdcomposer.lockvendor

如果我运行:

php composer.phar remove phpmd/phpmd
php composer.phar update

这达到了第1,2,3,4,5点,但没有达到第6点。

squizlabs/php_codesniffer更新到版本 。2.1.0


答案 1

从中删除该条目,然后运行 。composer.jsoncomposer update phpmd/phpmd

至于为什么这是有效的解决方案。我不知道,但这就是从中完全删除软件包并允许您安装新的/替换/冲突的软件包所需的。composer.lock/vendor


答案 2

请执行下列操作:

php composer.phar remove phpmd/phpmd

修改 composer.json 文件,使其包含以下要求部分。

{
    "require": {
        "squizlabs/php_codesniffer": "2.0.*",
    }
}

现在运行 .这应该让你到达你想去的地方。composer.phar update

注意:您还可以将php_codesniffer包固定到特定版本,例如.有关作曲家如何进行版本控制的更多信息,请参阅此处2.0.0


推荐