composer 删除(卸载)所有已安装的软件包(composer 安装回滚)

问题描述 投票:0回答:1

我有一个带有

composer.lock
文件的项目。 我使用以下命令安装了软件包:

composer install

现在我想将

composer install
命令回滚到运行之前的状态。

如何删除所有软件包而不影响

composer.lock
文件? 有没有单个
composer
命令可以做到这一点?

我尝试过:

composer remove *

但是我得到了:

[意外值异常]
“LICENSE”不是有效的别名。

我尝试过:

composer remove */*

但是后来我得到了一堆像这样的打印:

bin/console 在你的composer.json 中不是必需的,并且尚未被删除
列出的更新包“bin/console”未锁定。

为什么

composer remove *
根本不起作用? AFAIK 包名称为
VendorName/PackageName
是 Packagist 的常见约定,但不是必须的(如果您使用私有存储库),那么如何一次删除所有名为
IdontHaveAnySlash
等的包?

我可能会使用类似的东西:

for package in $(composer show | awk '{print $1}'); do composer remove --no-interaction --dev --no-install "$package"; done

但这不是一个简单且单一的

composer
命令。 此外,作曲家经常抱怨一个包是另一个包的一部分(依赖项),因此
composer
不会卸载它。

删除失败,学说/注释仍然存在,可能是另一个包所需要的。请参阅

composer why doctrine/annotations

因为我的目的是回滚到没有安装任何软件包而只安装文件的状态:

composer.lock
并且可能
composer.json
我真的不关心任何依赖项、软件包版本、下载存储库的网址等。

我只想拥有一个没有像以前那样安装任何依赖项的项目。

是否有任何单个

composer
命令可以做到这一点?

我的:

composer --version

是:

版本2.2.7 2022-02-25 11:12:27

php composer-php uninstallation
1个回答
5
投票
rm -rf vendor

在任何情况下,

install
都不应该对锁定文件进行任何更改,因此不应该从
install
“恢复”任何内容,而是删除已安装的文件。

如果锁文件最初不存在,则会创建它。

如果其他一些插件(例如 Symfony Flex)在此过程中对现有文件进行更改,您最好将项目置于版本控制系统之上,在这种情况下,恢复由 VCS 管理,而不是由 Composer 管理。

因为我的目的是回滚到未安装任何包而仅安装文件的状态:composer.lock 和可能的composer.json

为了能够运行

composer install
,您至少需要
composer.json
存在。
install
从锁定文件 (
composer.lock
) 中读取,但要求 JSON 配置文件也存在。如果锁文件不存在,将运行
update
并创建锁文件。

我试过了

composer remove

remove
require
相反。它从
composer.json
中删除包,同时
require
添加它们。与
install
不相反。没有安装的反义词,因为它没有太多概念意义。如果需要删除已安装的项目...总是可以这样做。

© www.soinside.com 2019 - 2024. All rights reserved.