connection lost 是 curl 底层 tcp 连接中断所致,非 http 错误码,常发生在下载大 zip 包中途;根本原因是 composer 默认不重试、残缺 dist 缓存被复用且未清理,需执行 composer clear-cache(windows 需手动删 %localappdata%\composer\cache\files\),并确保镜像配置为 repositories.packagist.org 且 url 末尾带 /。

Connection lost 不是标准 HTTP 错误码,而是 cURL 底层在 TCP 连接中途断开时抛出的底层提示——它比 Connection refused 更隐蔽,往往发生在下载中途、包体较大或网络抖动时。根本原因不是源地址错,而是连接被意外中断且 Composer 默认不重试。
为什么 Connection lost 总在 downloading 阶段出现
Composer 下载 ZIP 包时会先请求元数据(小),再串行下载每个 dist 包(大)。一旦某个包下载到一半断开,composer install 就卡住并报 Connection lost,且不会自动重试该包——缓存里只存了半截临时文件,下次仍会读它并校验失败。
- 常见于移动热点、Wi-Fi 切换、企业防火墙主动 kill 长连接
- 不是镜像源本身不可用,而是单次 TCP 流被截断
-
--no-cache仅跳过元数据缓存,对已写入一半的 dist 缓存无效 - PHP 的
max_execution_time或系统tcp_fin_timeout设置过短也会触发
composer install --no-cache 为什么有时没用
因为 --no-cache 只绕过 packages.json 等元数据缓存,但不清理 vendor/composer/archives/ 或 $COMPOSER_HOME/cache/files/ 下已损坏的 ZIP 片段。这些残缺文件会被复用,导致校验失败后直接报 Connection lost 而非重试。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须配
composer clear-cache才能清掉所有缓存层级(包括 dist 文件) - Windows 用户还需手动删
%LOCALAPPDATA%\Composer\Cache\files\,否则clear-cache可能漏清 - 若用 Docker,确保
COMPOSER_HOME挂载卷可写,否则缓存写不进去,重试时连 fallback 都没有
镜像源配置必须带 / 结尾且用 repositories.packagist.org
阿里云、腾讯云等镜像站要求 URL 末尾有 /,否则 Composer 拼路径时会把 p2/xxx.zip 变成 p2/xxx.zip/,触发 404 或静默连接中断。Composer 2.2+ 已弃用 repo.packagist,改用 repositories.packagist.org 结构,写错字段名等于没配。
- 正确命令:
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}' - 验证是否生效:
composer diagnose查 “Repo packagist.org:” 行,域名必须是你配的镜像地址 - 若
composer config -g repositories.packagist.org输出为空或报错,说明配置未写入,重跑命令并确认没漏引号和/
让 Composer 在断点处继续而不是重头来
Composer 没有 --resume,但可通过组合操作只重试失败包:先查 vendor/composer/installed.json 是否存在——若有,说明部分包已落地;若缺失,用 composer install --dry-run 预览待装列表,再对单个失败包执行 composer require vendor/name:version --no-update 单独拉取。
- 切忌删
vendor/和composer.lock后重装——已成功安装的包会重复下载,且 lock 文件记录原始源地址,不清掉它,仍可能走 packagist.org - 对大包(如
laravel/framework),可单独设超时:COMPOSER_PROCESS_TIMEOUT=1800 composer require laravel/framework - 如果反复卡在同一个包,手动
curl -L -o /tmp/pkg.zip 'https://mirrors.aliyun.com/composer/dists/vendor/name/version.zip'下载后放至$COMPOSER_HOME/cache/files/xxx/对应哈希目录,再重试
真正麻烦的不是配错镜像,而是残缺缓存 + 无重试机制 + 静默复用旧文件——这三者叠加,会让 Connection lost 看似随机,实则每次都在同一位置重现。










