定位卡点需分三层:DNS解析卡住(如Resolving dependencies)应换DNS或检查hosts;HTTP下载卡住才调http.timeout和镜像源;子进程执行卡住(如git clone)须设process-timeout。

连接超时不是“网慢了”就该调 timeout,而是必须先定位卡在哪一层——DNS 解析、HTTP 下载、还是子进程执行,每层对应完全不同的配置项和修复动作。
Resolving dependencies 卡住是 DNS 问题,不是 timeout 能解决的
这一步 Composer 只做域名解析(比如查 mirrors.aliyun.com 的 IP),不发 HTTP 请求、不读代理、不认 http.timeout。
- 用
dig mirrors.aliyun.com @114.114.114.114验证本地 DNS 是否可用;若超时或无响应,说明 DNS 被污染或不可达 - 临时换 DNS:Linux/macOS 编辑
/etc/resolv.conf加nameserver 8.8.8.8;Windows 在网络适配器里手动设置 - 检查
/etc/hosts(或C:\Windows\System32\drivers\etc\hosts)是否误把镜像域名指向了127.0.0.1或错误 IP - 手机热点直连测试一次——很多企业网会屏蔽
packagist.org和 GitHub 域名,但热点通常通畅
Downloading 卡住才该调 http.timeout 和镜像源
只有到这一步,Composer 才真正发起 HTTP 请求,此时 http.timeout 和 http.proxy 才起作用。
- 全局延长单次 HTTP 超时:
composer config -g http.timeout 600(单位秒,600 = 10 分钟) - 项目级更稳妥(尤其 CI):在
composer.json的"config"段加"http.timeout": 600 - 必须用国内镜像源,推荐阿里云:
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}'(注意末尾斜杠不能少) - 验证是否生效:
composer config -g repositories.packagist.org输出必须是完整 JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 换源后必须执行
composer clear-cache,否则旧缓存仍会复用失败地址
Executing command 卡住得调 process-timeout
这步涉及 git clone、unzip、post-install-cmd 等子进程,由 process-timeout 控制,默认仅 300 秒,和 HTTP 请求无关。
- 临时绕过(开发/CI):
composer install --process-timeout=0(禁用)或--process-timeout=1200(20 分钟) - 永久生效(全局):
composer config -g process-timeout 1200 - 若已设为 0 仍失败,大概率是内存不足——检查 PHP
memory_limit是否 ≥ 1.5G,尤其update解析锁文件阶段
镜像源设置失败的常见原因
命令看似执行成功,但 composer install 还是慢、还是走 packagist.org,根本原因是配置优先级和键名版本不匹配。
-
repo.packagist是 Composer 1.x 写法,2.2+ 版本必须用repositories.packagist.org,否则静默忽略 - 全局配置(
-g)会被项目级composer.json中的repositories字段完全覆盖——哪怕你只是加了一行空配置 - Windows 下用 Git Bash 时,
COMPOSER_HOME环境变量可能未生效,实际读取的是%APPDATA%\Composer\config.json - 执行命令后没清缓存:
composer clear-cache必须做,否则元数据仍从旧源加载
最常被忽略的是:换源后没清缓存,或者用了旧键名却以为配置成功了。一旦 composer config -g repositories.packagist.org 输出为空或报错,就说明镜像根本没生效,所有 timeout 调整都白费。











