换源、清缓存、删lock重装是解决Composer卡顿和Content-Length mismatch错误的三步核心方案;必须正确配置全局镜像源(单数repo.packagist、type为"composer"、HTTPS且结尾带/),并确认composer diagnose和-vvv日志中实际请求域名已生效,同时清除项目级配置与损坏缓存的干扰。

换源、清缓存、删 lock 文件重装,三步到位。国内直连 packagist.org 基本不可用,不换源就卡死。
composer config -g repo.packagist 静默失效的三个硬条件
它不报错,但配了等于没配——必须同时满足:
-
repo.packagist(注意是单数,不是repos或repositories) -
type值显式写成"composer",不能省略或写错 -
url必须是 HTTPS 且结尾带/,比如https://packagist.mirrors.ustc.edu.cn/✅,https://packagist.mirrors.ustc.edu.cn❌(漏斜杠会导致请求拼成/packages.json,直接 404)
验证是否真生效,只看这一条命令输出:composer config -g repo.packagist。正确结果必须是完整 JSON 对象,例如:{"type": "composer", "url": "https://packagist.mirrors.ustc.edu.cn/"}。空、null、https://packagist.org 或报错,都说明没写进去。
换源后仍卡在 “Downloading” 的真实原因
别信配置输出,要看实际发出去的请求:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer diagnose,找到Repo packagist.org:这一行,后面域名必须是你配的镜像地址(如packagist.mirrors.ustc.edu.cn) - 新建空目录,执行
composer init -n && composer require monolog/monolog -vvv,日志第一行Downloading https://...的域名必须匹配你的镜像 - 如果还看到
packagist.org,立刻检查项目级配置是否覆盖了全局:composer config repo.packagist(无-g)
常见静默 fallback 场景:composer.json 里已有 "repositories" 字段(哪怕只是空数组 []),全局配置就完全被忽略;缓存没清,旧的 packages.json 路径还在用;composer.lock 里记录的是原官方 dist.url,得删掉 vendor/ 和 composer.lock 再重装。
Content-Length mismatch 错误的本质和处理顺序
这不是 Composer bug,是 cURL 下载时服务器返回的 Content-Length 头与实际字节数不符,多见于网络中断、CDN 异常或镜像同步滞后。它不会断点续传,也不会自动重试。
- 第一步永远是
composer clear-cache:损坏的 zip 缓存(比如只下了一半)会反复触发该错误,重试毫无意义 - 第二步换稳定镜像源:阿里云已停用,Laravel China 已下线,目前仅推荐两个:
https://packagist.mirrors.ustc.edu.cn/(中科大,同步快)、https://mirrors.cloud.tencent.com/composer/(腾讯,华南延迟低) - 第三步加
--retry=3:比如composer install --retry=3,但前提是缓存已清、源已换 - 最后才考虑手动干预:从
composer.lock提取dist.url,用wget -c下载,再按vendor/name/hash/结构放进~/.composer/cache/files/—— 日常开发基本不用走这步
最常被忽略的是项目级 repositories 配置对全局的覆盖,以及缓存文件损坏后持续复用。这两点不排查,换十次源也没用。

















