答案是系统网络卡在DNS、TCP或TLS层,需先用ping和curl验证:ping packagist.org返回unknown host即DNS失败,换8.8.8.8;curl -I https://packagist.org卡住则为防火墙或代理拦截。

Composer网络不稳定,90%不是它的问题,而是你的系统卡在DNS、TCP或TLS某一层——别急着改配置,先验证连通性。
怎么快速定位是DNS失败还是防火墙拦截
跑两行命令比看错误日志快十倍:
-
ping packagist.org返回unknown host→ DNS解析失败,换8.8.8.8或114.114.114.114立竿见影 -
curl -I https://packagist.org卡住或报Failed to connect→ 防火墙、代理或HTTPS策略拦截,切手机热点一试便知
公司/学校网络常统一屏蔽https://packagist.org和https://github.com,这不是你配错了,是策略本身不放行。
镜像源配完没生效?缓存和优先级在捣鬼
换了阿里云或清华源还报错,大概率不是镜像不行,而是旧缓存或项目级配置覆盖了你的设置:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须执行
composer clear-cache,否则仍可能从本地缓存读取已失效地址 - 检查项目根目录
composer.json是否硬写了repositories→ 它的优先级高于全局镜像,会直接忽略config -g设的地址 - 清华镜像 URL 必须带末尾斜杠:
https://mirrors.tuna.tsinghua.edu.cn/composer/,少一个/就404 - 验证是否真生效:
composer config -g repo.packagist(看全局),composer config repo.packagist(不加-g,看当前项目)
process-timeout 和 http.timeout 控制的是不同阶段
process-timeout 控制整个命令生命周期(如 install 执行总时长),而 http.timeout 只影响第一步 HTTP 元数据请求(如拉 /packages.json);第二步代码下载往往走 git clone,它完全不受 Composer 配置控制:
-
composer config -g process-timeout 0禁用进程超时(CI/CD 中建议用COMPOSER_PROCESS_TIMEOUT=0环境变量固化) -
composer config -g http.timeout 600只延长元数据请求,对git clone卡死无效 - 想管
git clone超时:单独配 Git,例如git config --global core.sshCommand "ssh -o ConnectTimeout=30" - 想强制跳过 git、改用 zip 下载(对 GitHub 包有效):
composer config -g github-protocols https
IPv6 fallback 导致“卡住但不报错”最隐蔽
不是网络慢,而是 Composer 默认先尝试 IPv6 地址,超时(通常 1–3 秒)再 fallback 到 IPv4。上百个包叠加,就是几分钟无响应:
- 验证方法:
curl -v https://packagist.org 2>&1 | grep "Connected to",看到类似Connected to packagist.org (2a03:2880:...)且后续卡住,基本就是它 - 临时绕过:
CURL_IPRESOLVE=4 composer install - 全局启用 IPv4 优先:
composer config -g platform.php 8.1(配合镜像源使用更稳妥)
真正容易被忽略的是:部分包下载成功、部分因超时静默跳过,Composer 回滚时不会提示“xx 包未写入”,而是生成一个残缺的 vendor/autoload.php——文件存在但为空或只有几行注释。

















