根本原因是 composer 复用了过期的 packages.json 快照或 installed.json 状态;clear-cache 不清理 repo/ 下的 packages.json,需手动删除该目录及 vendor/composer/installed.json,并用 --dry-run -v 定位真实冲突。

直接删 composer clear-cache 不能解决依赖解析失败,它只清 ZIP 包和部分元数据,而卡在 “Resolving dependencies” 或报 “Your requirements could not be resolved” 的根本原因,是 Composer 复用了过期的 packages.json 快照或本地 installed.json 状态。
为什么 clear-cache 后还卡在 SAT 求解阶段
Composer 解析依赖时,会先读 ~/.composer/cache/repo/https---packagist.org/packages.json(或镜像对应路径)来获取所有包的版本映射。这个文件默认缓存 15 分钟,即使远端已发布新版本、修复了冲突,本地仍按旧快照做逻辑推理——结果就是无限回溯、停在 Resolving dependencies through SAT。
- 运行
composer clear-cache不会自动清理repo/下的packages.json,它只清files/和http/ - 日志里若出现
Reading /packages.json from cache而非Downloading https://...,说明元数据没刷新 - 私有仓库或 Satis 用户更要确认:服务端
packages.json是否真正更新并可被公开访问(权限 644、无 BOM、支持 HTTPS)
必须手动清理的三处缓存位置
仅靠命令行清理不够,得进目录确认是否真删干净。尤其 CI 或 Docker 环境中,缓存可能挂载在只读层或属主错乱。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行
composer clear-cache(清files/和http/) - 手动删
~/.composer/cache/repo/https---packagist.org/(Linux/macOS)或%APPDATA%\Composer\Cache\Repo\https---packagist.org\(Windows),确保packages.json重建 - 删
vendor/composer/installed.json——它记录当前安装状态,影响composer show和后续解析起点
删 composer.lock 前先看 --dry-run -v 输出
误删 composer.lock 会让 Composer 从头暴力求解,反而放大冲突。应先用干运行暴露真实瓶颈:
- 跑
composer update --dry-run -v,翻到最后 10 行,找Found conflicting requirements和高频出现的包名 - 若输出含
Because laravel/framework v10.0 requires php ^8.1...,说明是 PHP 版本约束冲突,不是缓存问题 - 用
composer why-not php:8.3或composer prohibits monolog/monolog:^2.0定位具体拦路虎,比盲目删锁文件高效得多
CI 和 Docker 环境下缓存清理要更谨慎
这类环境常因用户切换、挂载权限、缓存复用导致“看似清了实则没清”。关键点在于路径归属和缓存策略:
- 检查
~/.composer/cache属主:ls -ld $(composer config --global cache-dir),若为root而构建用户是www-data,clear-cache会静默失败 - CI 脚本中应避免缓存
vendor/,只缓存~/.composer/cache并设COMPOSER_CACHE_DIR环境变量 - 若已缓存过
vendor/,必须在composer install前加rm -rf vendor/,且命令带--no-cache防止复用损坏 ZIP
缓存清理不是“删得越多越安全”,而是精准定位哪一层快照失效——packages.json 过期、installed.json 错位、还是 composer.lock 固化了错误路径。不看日志直接删锁文件,相当于把导航仪重置成出厂设置后扔进陌生城市。










