卡在downloading时清理缓存无效,主因是镜像未生效、http-basic-timeout过短或php default_socket_timeout被掐断;须先-vvv定位日志末行url与错误码,再验证镜像配置、同步调高超时参数并手动清理元数据缓存目录。

清理 Composer 缓存本身不能解决下载超时,它只对「已损坏的 ZIP 包」或「卡在重试阶段」有间接帮助;真正卡住 Downloading 的主因是镜像未生效、HTTP 超时太短、或 PHP 底层 socket 被掐断——得先定位卡点,再选动作。
卡在 Downloading https:// 时别急着 clear-cache
看到日志停在 Downloading https://packagist.org/packages.json 或 Downloading https://mirrors.aliyun.com/composer/...,说明问题出在 HTTP 请求环节,不是缓存体积大或旧包多。这时候:
- 先运行
composer install -vvv,盯紧最后一行 URL 和错误码(比如cURL error 28或Operation timed out) - 检查是否真用了镜像:
composer config -g repo.packagist输出必须是https://mirrors.aliyun.com/composer/,否则clear-cache白清 - 确认 PHP 的
default_socket_timeout没比你设的http-basic-timeout还小:运行php -i | grep default_socket_timeout,若显示60,就得同步调高
删错地方反而延长恢复时间
composer clear-cache 默认只清 ~/.composer/cache/files/(ZIP 包)、repo/(元数据)、vcs/(Git 克隆),但它不碰 vendor/ 里的残留文件——而这些才是中断后最常导致二次失败的元凶:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 中断后
vendor/autoload.php可能已生成但不完整,后续命令会直接报Class not found,此时删整个vendor/反而让composer dump-autoload失败 - 更稳妥的做法是:删
vendor/autoload.php+rm -rf vendor/composer/,再跑composer dump-autoload→composer install - 如果仍报
Failed to extract或Content-Length mismatch,才说明 ZIP 真坏了,这时删对应包的 ZIP 文件(如~/.composer/cache/files/symfony/console/*.zip)比全量清缓存快得多
timeout 参数必须成对调,单改一个没用
http-basic-timeout(Composer 2.2+)或 http.timeout(旧版)管单次 HTTP 请求;process-timeout 管整个命令生命周期(含解压、脚本执行等)。两者缺一不可:
- 临时调试:运行
COMPOSER_HTTP_BASIC_TIMEOUT=600 COMPOSER_PROCESS_TIMEOUT=1800 composer install - 全局生效:
composer config -g http-basic-timeout 600+composer config -g process-timeout 1800 - 项目级锁定(推荐提交):在
composer.json的config段加"http-basic-timeout": 600和"process-timeout": 1800
最易被忽略的元数据刷新步骤
即使你清了缓存、调了 timeout、换了镜像,composer update 仍拉不到新版,大概率是因为 ~/.composer/cache/repo/https---packagist.org/ 下的 packages.json 还是旧的——clear-cache 不强制重新拉远端索引:
- 手动删掉整个目录:
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/ - 删掉本地状态快照:
rm -f vendor/composer/installed.json和rm -f composer.lock - 验证是否真刷新:跑
composer update --dry-run -v,必须看到Downloading https://packagist.org/packages.json这一行,才算成功
真正麻烦的从来不是“等多久”,而是中断后那些校验失败却还躺在 vendor/ 里的包文件——它们不会自己消失,也不会被 --no-cache 跳过,得靠人眼识别日志、精准定位、手动清理。










