使用 composer remove(composer 2.2+)是最安全的卸载方式,它自动删除包声明、更新锁文件并刷新自动加载,避免手动操作导致的依赖残留或类加载错误。

直接运行 composer remove 是最安全的方式
Composer 2.2+ 原生支持 composer remove,它会同时完成三件事:从 composer.json 中删掉包名、执行 composer install(即卸载并更新锁文件)、清理自动加载映射。比手动编辑再跑 composer update 更可靠,避免残留依赖或 autoloader 错误。
常见错误现象:只删 composer.json 里的条目却忘记 composer update,导致 vendor/ 里包还在,autoload_classmap.php 仍保留旧类路径,运行时可能报 Class not found 或静默加载失败。
- 执行
composer remove monolog/monolog(支持多个包,空格分隔) - 如果提示
Command "remove" is not defined,说明 Composer 版本太低,先升级:composer self-update - 若该包被其他已安装包依赖,
remove会失败并提示冲突,此时需先查清依赖链:composer depends monolog/monolog
手动删除后必须运行 composer update --lock
低于 Composer 2.2 的环境,或需要精细控制锁文件变更时,得手动操作。但关键不是“删哪行”,而是“删完怎么同步 vendor 和 lock”。只改 composer.json 不触发重安装,vendor/ 和 composer.lock 就会不一致。
使用场景:CI 环境锁定特定版本、团队强制要求 lock 文件变更可追溯、或要排除某个包的 transitive dependency 但保留其主包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 编辑
composer.json,从require或require-dev中删掉对应包行(注意逗号,别破坏 JSON 格式) - 立即运行
composer update --lock(不是install),它只更新 lock 文件,不碰 vendor;再补一次composer install清理 vendor - 若跳过
--lock直接composer install,可能因 lock 文件还记着旧包而静默恢复安装
composer outdated 能帮你发现“僵尸依赖”
很多包其实早已不用,但没人记得删。这类“僵尸依赖”不会报错,却拖慢安装、增加攻击面、干扰 IDE 补全。靠人工翻代码很难全覆盖,composer outdated 配合 --direct 是更务实的起点。
性能影响:每个未用的包都参与 autoloader 生成、PSR-4 映射扫描、甚至某些框架的编译缓存构建,积少成多会延长 CLI 命令和 Web 请求冷启动时间。
- 运行
composer outdated --direct --minor-only列出所有直接声明但有更新的包,顺手检查哪些根本没在代码里use过 - 用
grep -r "use.*PackageName" app/ src/ --include="*.php"快速验证是否真被引用(注意别漏掉别名use A as B) - 删之前建议加个临时
die('xxx used here');在疑似调用点,跑一遍测试/请求,确认无实际调用再下手
删包后别忘了检查 autoload 和配置文件残留
有些包注册了全局服务提供者(Laravel 的 providers)、自定义 autoloader(如 files 数组)、或写死在 .env 里的配置项。这些不会随 composer remove 自动清理,但一旦包没了,就会在启动时报错。
容易被忽略的地方:框架的配置合并逻辑(比如 Laravel 的 config/ 下某文件 require 了已删包的类)、PHP 扩展级钩子(如 ext-apcu 缓存中存了该包的序列化对象)、甚至 Docker 构建缓存里残留的 vendor 层。
- 搜索项目根目录:
grep -r "monolog" config/ app/ bootstrap/ --include="*.php" --include="*.env" - 检查
composer.json的autoload和autoload-dev字段,删掉已失效的psr-4映射或files引用 - 运行
composer dump-autoload确保新 autoloader 生效,再试php -m | grep apcu看扩展是否还试图加载旧类
rm -rf vendor composer.lock && composer install)里跑一次全量测试。










