composer卡在downloading (0%)本质是curl在tls握手或首字节等待超时,因默认http.timeout=60秒远低于运营商nat超时(120–180秒),需调高超时、强制ipv4、清理镜像缓存并确保镜像配置未被项目级repositories覆盖。

Composer 本身不感知网络抖动,所谓“避免抖动”其实是绕过它——靠镜像、调超时、压并发、清缓存四招堵漏,不是让它变聪明。
为什么composer install会卡在Downloading (0%)
这不是 Composer 在“等”,而是底层 cURL 卡在 TLS 握手或首字节等待上。默认 http.timeout=60 在国内骨干网波动时根本撑不住,运营商 NAT 超时常见为 120–180 秒,你得主动拉长它。
-
COMPOSER_NETWORK_TIMEOUT=300临时生效(推荐 CI 中用) -
composer config -g http.timeout 300永久生效(注意不是http-timeout) - IPv6 不稳时加
CURL_IPRESOLVE=4强制走 IPv4 -
--retries=5没用:它只控制重试轮数,不延长单次请求寿命
镜像配置写了却还在连 packagist.org?
大概率是项目级 repositories 字段覆盖了全局设置。哪怕你执行了 composer config -g repo.packagist,只要 composer.json 里有 "repositories": [...](包括空数组),Composer 就无视镜像,直连境外源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 验证方式:
composer install -vvv | head -n 5,看第一行 URL 是不是镜像域名 - 临时修复:
composer config --unset repositories - 长期方案:若需私有源,在
repositories里显式写入"packagist": { "type": "composer", "url": "https://mirrors.aliyun.com/composer/" },并加"packagist.org": false - 键名必须是
repo.packagist(单数),type字段不可省,URL 必须以https://开头且末尾带/
并发太高反而加重抖动失败
新版 Composer(2.2+)只认 http-max-concurrent-downloads,设成 12 以上在 macOS 或企业内网容易触发 cURL 句柄耗尽或 DNS 解析排队。
- 查当前值:
composer config -g http-max-concurrent-downloads - 设新值:
composer config -g http-max-concurrent-downloads 8 -
COMPOSER_PARALLEL=2是预设值,不是运行时自适应 - 别信
--prefer-dist能自动 fallback:私有包没提供 dist 时,它会退化为git clone,此时--retries完全失效
缓存中毒比网络抖动更隐蔽
composer clear-cache 只清 ~/.composer/cache/files/,真正“中毒”的是 ~/.composer/cache/repo/https---mirrors-aliyun-com-composer/ 下的 packages.json 和 provider-*.json——它们可能被 502/503 响应体污染,后续请求直接读坏文件,根本不发网络请求。
- 手动清理:
rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer - CI 构建中建议加:
composer clear-cache && rm -rf $(composer config --global cache-dir)/repo/ - 删
vendor/不够,必须连composer.lock一起删,否则校验值还是旧的
最易被忽略的点:镜像链路要打穿四环——元数据源、dist 包路径、并发策略、TLS 复用,漏一环,骨干网波动时就卡死。别只盯着 composer config 输出是否正确,得看 -vvv 日志里实际请求的是哪个域名。










