我有一个带有
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
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
不相反。没有安装的反义词,因为它没有太多概念意义。如果需要删除已安装的项目...总是可以这样做。