情况
假设我有一个项目,其中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_codesniffer
中composer.json
的版本约束我尝试过的
如果我运行:
php composer.phar remove phpmd/phpmd
这达到点 1、2、3、6 ,但没有达到点 4、5 。
phpmd/phpmd
的依赖项保留在composer.lock
和vendor
文件夹中。如果我运行:
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
中完全删除软件包并允许您安装新的/替换/冲突的软件包所需要的。