必须用 composer remove 卸载显式声明的包,它原子化执行移除声明、删 vendor 目录、更新 lock 文件、重建 autoload 四步;手动删文件或改配置易致 autoload 错乱、Class not found 及 CI 构建失败。

必须用 composer remove 卸载显式声明的包,不能靠删文件或改配置;清理“真正无用”的包(比如没人引用的孤儿依赖)得靠 composer-unused 扫描;缓存本身不占 vendor 空间,composer clear-cache 清的是 ~/.composer/cache,不是项目里的 vendor/。
怎么安全删掉一个明确不用的包?
直接运行 composer remove vendor/package-name,它会原子化完成四件事:从 composer.json 的 require 或 require-dev 区域移除条目、删除 vendor/vendor-name/package-name 目录、更新 composer.lock、重建 autoload 映射。失败则全部回退,不会留半截状态。
常见错误现象:
- 手动删
vendor/下目录 + 改composer.json+ 跑composer install→ autoload 错乱、Class not found、CI 构建哈希校验失败 - 执行
composer remove monolog/monolog后ls vendor/monolog还存在 → 不是失败,是设计行为:物理删除由后续composer install或composer update --lock触发
实操建议:
- 先确认包名是否准确:
composer show | grep monolog或打开composer.json查全称,大小写和斜杠都不能错 - 开发依赖如
phpunit/phpunit默认在require-dev,直接composer remove phpunit/phpunit即可,无需加--dev(除非同名包同时出现在两个区) - 遇到
Package is required by another package提示,别硬删 —— 这是保护机制,先跑composer why guzzlehttp/guzzle查谁在用,再决定是否连带删上游包 - 临时调试想跳过实时重装?可用
composer remove pkg --no-update,但之后必须补composer update,否则可能漏掉冲突解析
怎么找出并删掉没人用的“孤儿依赖”?
composer remove 只处理你明确指定的包,不会顺手清理被间接拉进来的、但当前项目代码里完全没调用的“孤儿依赖”,比如删了 monolog/monolog 后,psr/log 还留在 vendor/ 里 —— 只要别的包还 require 它,Composer 就认为它有用。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
实操建议:
- 先装扫描工具:
composer require --dev composer-unused/composer-unused - 运行
composer unused,它默认只扫src/;若项目结构不同(如用app/或lib/),需加--scan-path=app;测试中用的包要加--scan-tests - 注意盲区:
class_exists('Some\Class')、配置文件里的字符串(如'monolog/handler/stream')、动态类名(new $className)均无法被自动识别,必须人工grep验证 - 批量删多个包时,用空格分隔:
composer remove spatie/laravel-permission laravel/sanctum,不要加引号或逗号
缓存清理为什么经常“清了没感觉”?
composer clear-cache 默认只清 ~/.composer/cache/files/、repo/、vcs/ 三个子目录,不碰 vendor/ —— 而真正占空间的往往是 vendor/(中等 Laravel 项目常达 300–800 MB),不是缓存(通常不到 100 MB)。
实操建议:
- 先查真实路径:
composer config --global cache-dir,再看大小:du -sh $(composer config --global cache-dir)(Linux/macOS)或 Windows 资源管理器右键属性 - 不到 200 MB 基本不用管;超 1.5 GB 且半年没碰老项目,才值得动手
- 最占空间的是
vcs/目录(存 Git 裸仓库),composer clear-cache默认不清理它,得手动删:rm -rf ~/.composer/cache/vcs/*(Linux/macOS)或rd /s /q "%APPDATA%\Composer\Cache\vcs"(Windows) - CI/CD 中必加
--no-interaction,否则命令会卡住;加--dry-run先预检,避免误删 NFS 挂载点等非预期路径
真正容易被忽略的是:卸载后必须人工检查三处硬编码残留 —— use 语句、配置文件中的类名字符串、以及 composer.json 里 autoload 或 autoload-dev 字段中指向已删包的路径。这些 composer remove 根本不管,但 runtime 一跑就报错。

















