情况

假设我有一个项目,其中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_codesniffer版本2.1.0,但我不想
    运行update呢。我现在想保留2.0.0版本,也许几天后再运行update

    问题

    现在,我想从项目中删除phpmd/phpmd。我想实现以下几点:
  • phpmd/phpmd删除composer.json
  • phpmd/phpmd删除composer.lock
  • phpmd/phpmd文件夹
  • 中删除vendor
  • phpmd/phpmd删除composer.lock的所有依赖项
  • phpmd/phpmd文件夹
  • 中删除vendor的所有依赖项
  • 不要将squizlabs/php_codesniffer更新为2.1.0版本

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

    我尝试过的

    如果我运行:
    php composer.phar remove phpmd/phpmd
    

    这达到点 1、2、3、6 ,但没有达到点 4、5
    phpmd/phpmd的依赖项保留在composer.lockvendor文件夹中。

    如果我运行:
    php composer.phar remove phpmd/phpmd
    php composer.phar update
    

    这会达到点 1、2、3、4、5 ,但不会达到点 6
    squizlabs/php_codesniffer更新为2.1.0版本。

    最佳答案

    composer.json删除条目,然后运行composer update phpmd/phpmd

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

    10-07 15:49