composer超时需分清process-timeout(控制命令总时长)和http-basic-timeout(控制单次http请求),二者作用域不同;修改优先级为命令行>项目级>全局,且须同步调整php的default_socket_timeout和max_execution_time。

timeout参数名和作用域必须分清
Composer里没有统一的timeout配置项,实际生效的是两个独立参数:process-timeout和http-basic-timeout(2.2+)或旧版的http.timeout。它们管的事完全不同,混用等于白调。
-
process-timeout:控制整个命令生命周期,比如composer install从解析依赖、下载、解压到执行post-install-cmd的总时长,默认300秒 -
http-basic-timeout(推荐)或http.timeout(旧版):只管单次HTTP请求,比如拉packages.json或下载ZIP包,Composer 2.2+默认仅60秒,弱网下极易失败
修改位置分三层:命令行、项目级、全局
优先级从高到低是:命令行参数 > 项目composer.json > 全局~/.composer/config.json。改错层级会导致看似改了却没生效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 临时调试:直接加参数,注意等号不能少
composer install --timeout=1200 --http-basic-timeout=300 - 项目级(可提交、可复现):
composer config process-timeout 1200composer config http-basic-timeout 300 - 全局生效(推荐长期使用):
composer config -g process-timeout 1800composer config -g http-basic-timeout 600
环境变量和PHP底层限制常被忽略
即使http-basic-timeout设为600,若PHP的default_socket_timeout仍是60,连接会在60秒后被PHP底层掐断——这比Composer报错还早。
- 查当前值:
php -i | grep default_socket_timeout - 临时覆盖(CI常用):
php -d default_socket_timeout=600 composer install - 脚本类超时(如
post-install-cmd)不归Composer管,得调PHP的max_execution_time:php -d max_execution_time=0 composer install
镜像没生效?先清缓存再查配置覆盖
换了阿里云镜像还超时,大概率是缓存或配置冲突。Composer会优先读项目composer.json里的repositories字段,哪怕你全局配了镜像也无效。
- 清缓存必做:
composer clear-cache - 检查是否硬写了仓库:
grep -A5 "repositories" composer.json - 验证镜像是否真生效:
composer config -g repos.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
-vvv最后一行才是关键线索——停在Downloading就调http-basic-timeout,停在Executing command才轮到process-timeout,别凭感觉瞎调。










