卡在Downloading阶段应优先切国内镜像源、清缓存、删composer.lock和vendor重试;若仍超时,需同步调高process-timeout和http-basic-timeout(Composer 2.2+),并排查代理、防火墙或杀毒软件拦截。

超时卡在Downloading阶段怎么处理
这是最常见的情况,表现为命令停在 Downloading https://... 几十秒不动,最后报 The process timed out 或 file could not be downloaded。本质是 HTTP 请求被中断,不是 Composer 本身慢,而是网络连不上或响应太慢。
优先执行三件事:
- 切国内镜像源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 清空缓存:
composer clear-cache(否则旧锁文件仍会尝试回源 packagist.org) - 删掉
composer.lock和vendor/后重试(尤其当 lock 文件里记录的是旧源地址时)
如果仍卡住,检查是否被代理或防火墙拦截;Windows 用户还要确认杀毒软件没拦截 cURL 连接。
为什么加了 --timeout 还是超时
因为 Composer 有两个独立超时机制:process-timeout 控总耗时(默认 300 秒),http-basic-timeout 控单次 HTTP 请求(默认 60 秒)。只调一个,另一个照样触发失败。
正确做法是两者一起设:
- 临时生效:
composer install --timeout=1200 --http-basic-timeout=300 - 永久生效(全局):
composer config -g process-timeout 1200和composer config -g http-basic-timeout 300 - 注意:
--http-basic-timeout仅 Composer 2.2+ 支持;旧版本只能靠换镜像 +--timeout硬扛
设为 0 表示禁用超时,但不推荐——可能卡死无响应,排查更困难。
卡在 Executing command 怎么排查
比如输出停在 Executing command (CWD: /path): php artisan key:generate,说明是 post-install-cmd 脚本卡住,跟网络无关。
常见原因和应对方式:
- 脚本本身需要交互输入(如 Laravel 的
key:generate在某些环境会等 yes/no)→ 加--no-interaction参数运行 - artisan 命令依赖未就绪的配置或缓存 → 先
cp .env.example .env,再手动运行脚本确认是否报错 - PHP 扩展缺失(如 mbstring、openssl)→ 运行
php -m | grep -E "mbstring|openssl|curl"检查 CLI 环境 - 脚本中用了未安装的二进制(如 node、npm)→ 查看
composer.json的scripts段,逐条手动执行定位
临时跳过所有脚本:composer install --no-scripts --no-plugins,验证是否真由脚本引起。
Docker 或 CI 环境下超时更难搞
容器里常叠加多层限制:Composer 自身 timeout、PHP max_execution_time、Docker --stop-timeout、甚至宿主机资源不足。光调 Composer 参数往往没用。
关键动作要一步到位:
- 环境变量比命令行参数更可靠:
COMPOSER_PROCESS_TIMEOUT=1200可覆盖插件启动的子进程 - 强制 dist 包:
--prefer-dist避免 git clone 卡住(尤其私有包没配 SSH Key 时) - 关掉 autoload 生成:
--no-autoloader,装完再单独跑composer dump-autoload --optimize - 确认容器内存 ≥ 1.5G,特别是
composer update解析依赖树阶段极易 OOM
真正耗时的从来不是“等”,而是反复失败重试。换镜像 + 关回源 + 清缓存,这三步做完,90% 的超时问题其实已经消失了——调 timeout 只是兜底,不是解法。


















