作曲家删除(卸载)所有已安装的软件包(作曲家安装回滚)
composer remove (uninstall) all installed packages (composer install rollback)
我有一个包含 composer.lock
文件的项目。
我使用以下命令安装了软件包:
composer install
现在我想将 composer install
命令回滚到 运行 之前的状态。
如何在不影响 composer.lock
文件的情况下删除所有包?
是否有任何单个 composer
命令可以做到这一点?
我试过了:
composer remove *
但我得到了:
[UnexpectedValueException]
"LICENSE" is not a valid alias.
我试过了:
composer remove */*
但后来我得到一堆印刷品,如:
bin/console is not required in your composer.json and has not been removed
Package "bin/console" listed for update is not locked.
为什么 composer remove *
根本不起作用?据我所知,包名称 VendorName/PackageName
是 Packagist 的通用约定,但不是必须的(如果您使用私有存储库)那么如何一次删除所有名为 IdontHaveAnySlash
等的包?
我可能会使用类似于:
for package in $(composer show | awk '{print }'); do composer remove --no-interaction --dev --no-install "$package"; done
但这不是一个简单的单一 composer
命令。
作曲家也经常抱怨一个包是另一个包的一部分(依赖),所以 composer
不会卸载它。
Removal failed, doctrine/annotations is still present, it may be required by another package. See composer why doctrine/annotations
.
因为我的意图是回滚到没有安装任何包但只有文件的状态:composer.lock
并且可能 composer.json
我真的不关心任何依赖项、包版本,下载存储库的 url 等
我只想拥有一个像以前一样没有安装任何依赖项的项目。
是否有任何单个 composer
命令可以做到这一点?
我的:
composer --version
是:
version 2.2.7 2022-02-25 11:12:27
根据 yivi 的回答,我创建了一个简单的测试来验证:
mkdir -p /tmp/composer-install
cd /tmp/composer-install
curl -o composer.json https://raw.githubusercontent.com/composer/composer/18246212db7103d0a2688febcc336f77183275ee/composer.json
curl -o composer.lock https://raw.githubusercontent.com/composer/composer/d955458f271edb4fcc055a394f90a60a8328a2a8/composer.lock
sha1sum composer.json > composer.json.sha1
sha1sum composer.lock > composer.lock.sha1
composer install
sha1sum -c composer.json.sha1
sha1sum -c composer.lock.sha1
输出:
composer.json: OK
composer.lock: OK
所以 composer.json
和 composer.lock
都不受 composer install
的影响,所以实现 composer install
回滚(卸载)的唯一一件事就是删除vendor
目录
rm -rf vendor
但是正如yivi所说:
If some other plugin (e.g Symfony Flex) makes changes to your existing files during the process, you'd better have the project on top of a version control system, in which case reverting is managed by VCS, not of composer.
我没有针对那个案例进行测试。
rm -rf vendor
在任何情况下,install
都不应该对锁定文件进行任何 更改,因此不应该从 [=11= 中“还原”任何内容] 但删除已安装的文件。
如果锁文件最初不存在,则会创建它。
如果一些其他插件(例如 Symfony Flex)在此过程中更改了您现有的文件,您最好将项目置于版本控制系统之上,在这种情况下,恢复由 VCS 管理,而不是作曲家。
As my intention is to rollback to the state that did not have any package installed but only files: composer.lock and potentially composer.json
要让你能够 运行 composer install
,你至少需要 composer.json
存在。 install
从锁定文件 (composer.lock
) 中读取,但也需要 JSON 配置文件存在。如果锁定文件不存在,update
将改为 运行 并创建锁定文件。
I tried composer remove
remove
与require
相反。它从 composer.json
中删除包,而 require
添加它们。不是 install
的反义词。 install 没有反义词,因为它在概念上没有多大意义。如果需要删除已安装的项目...可以随时删除。
我有一个包含 composer.lock
文件的项目。
我使用以下命令安装了软件包:
composer install
现在我想将 composer install
命令回滚到 运行 之前的状态。
如何在不影响 composer.lock
文件的情况下删除所有包?
是否有任何单个 composer
命令可以做到这一点?
我试过了:
composer remove *
但我得到了:
[UnexpectedValueException]
"LICENSE" is not a valid alias.
我试过了:
composer remove */*
但后来我得到一堆印刷品,如:
bin/console is not required in your composer.json and has not been removed
Package "bin/console" listed for update is not locked.
为什么 composer remove *
根本不起作用?据我所知,包名称 VendorName/PackageName
是 Packagist 的通用约定,但不是必须的(如果您使用私有存储库)那么如何一次删除所有名为 IdontHaveAnySlash
等的包?
我可能会使用类似于:
for package in $(composer show | awk '{print }'); do composer remove --no-interaction --dev --no-install "$package"; done
但这不是一个简单的单一 composer
命令。
作曲家也经常抱怨一个包是另一个包的一部分(依赖),所以 composer
不会卸载它。
Removal failed, doctrine/annotations is still present, it may be required by another package. See
composer why doctrine/annotations
.
因为我的意图是回滚到没有安装任何包但只有文件的状态:composer.lock
并且可能 composer.json
我真的不关心任何依赖项、包版本,下载存储库的 url 等
我只想拥有一个像以前一样没有安装任何依赖项的项目。
是否有任何单个 composer
命令可以做到这一点?
我的:
composer --version
是:
version 2.2.7 2022-02-25 11:12:27
根据 yivi 的回答,我创建了一个简单的测试来验证:
mkdir -p /tmp/composer-install
cd /tmp/composer-install
curl -o composer.json https://raw.githubusercontent.com/composer/composer/18246212db7103d0a2688febcc336f77183275ee/composer.json
curl -o composer.lock https://raw.githubusercontent.com/composer/composer/d955458f271edb4fcc055a394f90a60a8328a2a8/composer.lock
sha1sum composer.json > composer.json.sha1
sha1sum composer.lock > composer.lock.sha1
composer install
sha1sum -c composer.json.sha1
sha1sum -c composer.lock.sha1
输出:
composer.json: OK
composer.lock: OK
所以 composer.json
和 composer.lock
都不受 composer install
的影响,所以实现 composer install
回滚(卸载)的唯一一件事就是删除vendor
目录
rm -rf vendor
但是正如yivi所说:
If some other plugin (e.g Symfony Flex) makes changes to your existing files during the process, you'd better have the project on top of a version control system, in which case reverting is managed by VCS, not of composer.
我没有针对那个案例进行测试。
rm -rf vendor
在任何情况下,install
都不应该对锁定文件进行任何 更改,因此不应该从 [=11= 中“还原”任何内容] 但删除已安装的文件。
如果锁文件最初不存在,则会创建它。
如果一些其他插件(例如 Symfony Flex)在此过程中更改了您现有的文件,您最好将项目置于版本控制系统之上,在这种情况下,恢复由 VCS 管理,而不是作曲家。
As my intention is to rollback to the state that did not have any package installed but only files: composer.lock and potentially composer.json
要让你能够 运行 composer install
,你至少需要 composer.json
存在。 install
从锁定文件 (composer.lock
) 中读取,但也需要 JSON 配置文件存在。如果锁定文件不存在,update
将改为 运行 并创建锁定文件。
I tried
composer remove
remove
与require
相反。它从 composer.json
中删除包,而 require
添加它们。不是 install
的反义词。 install 没有反义词,因为它在概念上没有多大意义。如果需要删除已安装的项目...可以随时删除。