卡死报超时90%非网络中断,而是镜像配置错误(repo.packagist键名、type值、URL末尾/缺失)、缓存未清、DNS污染或未生效;Resolving dependencies阶段不走HTTP,http.timeout无效,需用dig和composer config -g验证。

卡死报超时,90%不是网络真断了,而是 Composer 没连上镜像源、配置写错、缓存没清,或根本没走到 HTTP 下载那步——先看 -vvv 输出最后一行,再决定调哪个参数。
Resolving dependencies 卡住:DNS 或镜像配置失效
这一步只做域名解析(比如查 mirrors.aliyun.com 的 IP),不发 HTTP 请求,http.timeout 完全无效。
- 运行
dig mirrors.aliyun.com @8.8.8.8,若无响应或超时,说明本地 DNS 被污染,临时换 DNS(Linux/macOS 改/etc/resolv.conf,Windows 在网卡里手动设) - 检查
/etc/hosts(Windows 是C:\Windows\System32\drivers\etc\hosts)是否误把镜像域名指向了127.0.0.1 - 验证镜像是否真生效:
composer config -g repo.packagist必须输出完整 JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};空、null或仍是packagist.org都说明配置失败 - 换源命令必须严格:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/——repo.packagist不能多写s,composer这个 type 值不能省,URL 末尾斜杠/不能漏
Downloading 卡住:HTTP 请求超时或镜像不可用
这时才轮到 http.timeout 和 http-basic-timeout 起作用。注意:Composer 2.2+ 才认 http-basic-timeout,旧版本只能靠 --timeout 硬扛。
- 先确认镜像源本身可用:
curl -I https://mirrors.aliyun.com/composer/packages.json,返回200 OK才算通 - 全局延长单次 HTTP 请求时限:
composer config -g http.timeout 600(建议 300~600 秒) - Composer 2.2+ 可额外放宽底层连接/读取时限:
composer config -g http-basic-timeout 300 - 单次调试更直接:
composer install --timeout=1200 --http-basic-timeout=240(后者仅 v2.2+ 有效)
process-timeout 控制总耗时,别和 http.timeout 混用
process-timeout 是整个 composer install 命令的“生命倒计时”,包含解压、执行脚本、生成 autoload 等所有环节,默认 300 秒。它和 http.timeout 独立生效,只调一个可能白等。
- 大项目含大量 post-install-cmd(如 Laravel 的
php artisan key:generate)容易触发这个超时,建议设为1200(20 分钟):composer config -g process-timeout 1200 - CI 环境务必显式设置:
COMPOSER_PROCESS_TIMEOUT=1200,否则容器重启后配置丢失 - 设为
0表示不限时,但不推荐——真卡死时无法自动中断,排查更难 - 如果卡在
Executing command(比如git clone),才是process-timeout在起作用,不是网络问题
换源后仍慢?检查项目级配置和缓存
全局换源会被项目 composer.json 里的 repositories 字段覆盖,且旧缓存会继续复用失败地址。
- 运行
composer config --list和composer config --list --global对比,确认实际生效的是哪一层配置 - 删掉项目
composer.json中冗余的repositories,尤其硬编码了packagist.org或私有 Git 地址的项 - 换源后必须立刻执行
composer clear-cache,否则镜像等于白配 - 加加速项防后续卡顿:
composer config -g prefer-dist true(避免走 git clone)、composer config -g parallel-downloads 10(Composer 2.2+)
最常被忽略的点:卡在 Generating autoload files 后无响应,根本不是网络或 timeout 的事——那是文件系统(如 WSL2/NTFS 挂载卷 symlink 解析慢)或 PHP CLI 配置(APCu 未启用、opcache 配置不当)的问题,得另查。











