composer remove 会从 composer.json 的 require 或 require-dev 中移除包名、执行包内 uninstall 脚本(如有)、重解析依赖并可能连带卸载独占依赖,但不清理手动编写的 use 语句、配置引用或数据库记录。

composer remove 会删除哪些内容
composer remove 不只是删掉 vendor/ 里的代码,它还会:
- 从 composer.json 的 require 或 require-dev 中移除对应包名
- 执行自动卸载逻辑(比如调用包内定义的 uninstall 脚本,如果有的话)
- 运行 composer install 等效的依赖重解析,可能连带卸载该插件所独占依赖的其他包
注意:它不会清理你手动在代码里写的 use 语句、配置文件引用、或数据库迁移记录——这些得自己处理。
卸载单个插件的基本命令
执行前确保你在项目根目录(即有 composer.json 的地方):
composer remove vendor/package-name
例如卸载 Laravel 的调试工具:
composer remove barryvdh/laravel-debugbar
常见错误现象:
- 报错 Package "xxx" is not required in your composer.json → 实际没装,或装在 require-dev 但你没加 --dev
- 卸载后 vendor/ 里还有残留文件 → 多半是没触发自动清理,可补运行 composer dump-autoload
卸载 dev-only 插件要加 --dev
如果你装的是开发期依赖(比如测试工具、代码检查器),它们默认写在 require-dev 里,不加 --dev 就找不到:
composer remove phpunit/phpunit --dev
不加 --dev 时,composer remove 只查 require;加了才查 require-dev。
也可以一次性清空所有 dev 包(慎用):
composer remove --dev vendor1/pkg1 vendor2/pkg2
卸载失败时的排查重点
遇到卡住或报错,优先检查:
- 当前 Composer 版本是否 ≥ 2.2(composer --version);旧版不支持 remove 命令,得用 composer require vendor/package-name:dev-none 曲线救国
- 是否存在版本约束冲突,比如 A 包依赖 B 包,而你只删 B → Composer 会拒绝并提示“would break package A”
- composer.json 是否被手动改过但没运行 composer update 同步锁文件,导致状态不一致
最常被忽略的是:卸载后忘记删掉服务提供者(如 Laravel 的 config/app.php 中的 providers)、中间件、Facade 别名——这些不会自动清理,留着会直接报类未找到错误。










