composer超时需分三层排查:卡在resolving dependencies是dns或源不可达,与timeout无关;卡在downloading是http.timeout不足,应设为300~600秒;卡在executing command是process-timeout生效,推荐设1200秒并优先用环境变量composer_process_timeout。

Composer 网络超时不是“调大 timeout 就完事”的问题,它本质是三层阻塞:DNS/连接层失败、HTTP 请求卡住、子进程执行拖死——错配参数只会让等待更久,却解决不了真实瓶颈。
卡在 Resolving dependencies 是 DNS 或源不可达,跟 timeout 无关
看到这行输出就停住,说明 Composer 还没开始下载,连 packages.json 都没拿到。这不是慢,是根本连不上。
- 先手动测试:
curl -I https://mirrors.aliyun.com/composer/packages.json,看是否返回200 OK - 若失败,检查
/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows)是否误写了packagist.org的错误 IP - 换 DNS 测试:
dig mirrors.aliyun.com @114.114.114.114,若解析异常,临时改系统 DNS - 确认镜像已生效:
composer config -g repos.packagist.org.url输出必须是https://mirrors.aliyun.com/composer/,不是packagist.org或已停用的phpcomposer.com
卡在 Downloading https://… 是 http.timeout 不够,不是 process-timeout
这一阶段报 cURL error 28、Could not fetch 或反复重试后静默退出,99% 是单次 HTTP 请求等不及响应。process-timeout 完全不参与这个过程。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 全局设高一点:
composer config -g http.timeout 600(单位秒,300~600 足够) - 项目级覆盖更安全:
composer config http.timeout 600,写入当前composer.json的config段 - 临时调试优先用环境变量:
COMPOSER_HTTP_TIMEOUT=600 composer install,避免污染配置 - 注意:PHP 自身 socket 限制也起作用,运行
php -i | grep default_socket_timeout,CLI 模式下若值为60,可临时绕过:php -d default_socket_timeout=600 $(which composer) install
卡在 Executing command 或报 The process timed out 是 process-timeout 或 COMPOSER_PROCESS_TIMEOUT 生效点
常见于 git clone 私有仓库、解压大 ZIP、跑 post-install-cmd 脚本。错误里带 [RuntimeException] The process timed out.,且 -vvv 最后一行明确停在某条命令上。
- 新版 Composer 已废弃
composer config -g process-timeout,全局生效唯一可靠方式是环境变量:export COMPOSER_PROCESS_TIMEOUT=1200(Linux/macOS)或 Windows 系统变量 - 项目级推荐写进
composer.json:"process-timeout": 1200,避免 CI 中因环境变量未加载而失效 - 临时救急:
composer install --process-timeout=1200,但注意该参数在某些旧版本中会被忽略 - 别设
0:表示禁用超时检查,真遇到 Git 不可达或脚本死循环,进程会无限挂起
用了镜像还超时?可能被私有源、git 协议或 WSL2 文件系统拖垮
镜像只加速公共包(packagist.org 下的),对 repositories 字段硬编码的 GitHub/GitLab 地址、SSH 私仓、或 git:// 协议完全无效。
- 检查
composer.json是否含repositories,删掉冗余项,尤其避免混用packagist.org和镜像 - 强制走 HTTPS 而非 git 协议:
composer config -g github-protocols ["https"],再加"preferred-install": {"*": "dist"}避免触发git clone - WSL2 用户注意:
Generating autoload files卡住大概率是/mnt/c/下 symlink 解析慢,确认/etc/wsl.conf含metadata=true,并避免在 NTFS 挂载路径下运行 - CI 环境务必显式设
COMPOSER_PROCESS_TIMEOUT和COMPOSER_HOME,容器重启后不会继承本地配置
最常被忽略的是:错误信息里没有 “timeout” 字样,不代表不是超时。比如 file_get_contents(): SSL operation failed 或 will retry 循环后退出,其实是 TLS 握手超时,得靠 composer install -vvv 看最后几行才能定位到 cURL error 28 或 error:14090086。










