composer remove 是 Composer 2.2+ 卸载依赖的标准安全方式,自动更新 composer.json、清理 vendor 和 autoload 映射,并阻止破坏性卸载;残留问题需 dump-autoload 或 clear-cache 解决。

直接运行 composer remove 就能安全卸载依赖,它会自动更新 composer.json、删掉包代码、清理自动加载映射,比手动删 vendor/ 下目录靠谱得多。
用 composer remove 卸载指定包
这是 Composer 2.2+ 内置的标准方式,替代了旧版的 composer require --dev --no-install 或手动编辑再 composer install 的繁琐流程。
- 执行
composer remove(例如vendor/package-namecomposer remove monolog/monolog) - 命令会自动:删
require或require-dev中对应条目、运行composer install清理vendor/、更新autoload映射 - 如果包被其他已安装包依赖,Composer 会报错并中止,避免破坏依赖图 —— 这是保护机制,不是 bug
- 不加
--no-update参数时,它默认执行完整重装;加了则只改composer.json,需后续手动composer install
卸载后 vendor/ 里还有残留?检查 autoload 和缓存
极少数情况下,vendor/ 看似删干净了,但类仍能被自动加载,或 composer show 还列出该包 —— 多半是 autoload 缓存没刷新或路径残留。
- 运行
composer dump-autoload强制重建自动加载映射 - 清空 Composer 自身缓存:
composer clear-cache(尤其当你之前用过--no-cache或镜像源异常时) - 检查
vendor/composer/autoload_*.php文件里是否还存在该包的路径声明(正常情况下remove会处理,但若中断过可能残留) - 确认没有在
composer.json的autoload.files或autoload.psr-4里硬编码引用该包的路径
想彻底清空 vendor 并重装?别用 rm -rf vendor
手动删 vendor/ 目录看似干脆,但容易导致后续 composer install 失败或 autoload 错乱,尤其项目启用了 optimize-autoloader 或自定义 classmap。
- 正确做法是先
composer remove所有要删的包,再执行composer install --no-dev(如需生产环境)或composer install - 如果只是想重置整个
vendor/(比如怀疑损坏),用composer install --no-cache更稳妥,它会跳过本地缓存,重新下载并解压所有依赖 - 绝对避免在未删
composer.lock的情况下仅删vendor/后运行composer update—— 这可能导致版本漂移,特别是锁文件里有精确哈希时
composer remove nesbot/carbon # 输出类似: # ./composer.json has been updated # Running composer install # Loading composer repositories with package information # Updating dependencies # Package operations: 0 installs, 0 updates, 1 removal # - Removing nesbot/carbon (2.72.3) # Generating autoload files # 11 packages you are using are looking for funding. # Use the `composer fund` command to find out more!
真正要注意的是:有些包(比如 Laravel 的官方扩展包)可能通过服务提供者或配置文件深度集成,卸载后得手动清理 config/ 或 app/Providers/ 里的相关注册。Composer 不管这部分 —— 它只管代码和依赖声明。










