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

Jim*_*mix 5 php uninstallation composer-php

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

composer install
Run Code Online (Sandbox Code Playgroud)

现在我想将该composer install命令回滚到运行之前的状态。

如何删除所有包而不影响composer.lock文件?有没有一个composer命令可以做到这一点?

我试过:

composer remove *
Run Code Online (Sandbox Code Playgroud)

但我得到了:

[UnexpectedValueException]
“LICENSE”不是有效的别名。

我试过:

composer remove */*
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

删除失败,学说/注释仍然存在,另一个包可能需要它。看composer why doctrine/annotations

因为我的目的是回滚到没有安装任何包而只安装文件的状态:composer.lock而且composer.json我可能真的不关心任何依赖项、包版本、下载存储库的 URL 等。

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

有没有一个composer命令可以做到这一点?

我的:

composer --version
Run Code Online (Sandbox Code Playgroud)

是:

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

根据 yivi 的回答,我创建了一个简单的测试来验证:

composer install
Run Code Online (Sandbox Code Playgroud)

输出:

作曲家.json: 好的
作曲家.lock: 好的

所以两者composer.jsoncomposer.lock不受影响composer install所以实现回滚(卸载)的唯一一件事composer install就是删除vendor目录

rm -rf vendor
Run Code Online (Sandbox Code Playgroud)

然而正如 yivi 提到的:

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

我没有针对这种情况进行测试。

yiv*_*ivi 4

rm -rf vendor
Run Code Online (Sandbox Code Playgroud)

在任何情况下,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。没有安装的反义词,因为它没有太多概念意义。如果需要删除已安装的项目...总是可以这样做。