换国内镜像源比单纯调高超时参数更治本,因网络抖动、dns污染和回源慢才是根本原因;需同步配置process-timeout(建议1200)和http-basic-timeout(建议300~600),并关闭packagist.org回源、强制--prefer-dist。

直接换国内镜像源 + 调高 process-timeout 和 http-basic-timeout,比单纯延长超时更有效。超时本质是网络不稳定叠加默认限制过严,不是命令写错了。
为什么大型包总卡在 downloading 或 timeout
Composer 下载大包(比如 laravel/framework 带完整测试套件的 dist)时,默认 http-basic-timeout=60 秒根本不够——首字节延迟、TLS 握手、body 传输都算在里面。而整个流程还受 process-timeout=300 约束,解压、运行 post-install-cmd、生成 autoload 全部挤在这 5 分钟里。
常见现象包括:
– composer update -vvv 最后停在 Downloading https://...:HTTP 层超时,该调 http-basic-timeout
– 停在 Executing command(如 git clone 或 unzip):子进程被 process-timeout 终止
– 停在 Generating autoload files 后无响应:不是超时问题,是文件系统或 PHP 配置(如 WSL2 symlink 解析慢、APCu CLI 未启用)
必须同时调高的两个超时参数
process-timeout 和 http-basic-timeout 是独立生效的,只改一个大概率仍失败。
-
process-timeout控制整个命令生命周期(含依赖解析、下载、解压、脚本执行),建议设为1200(20 分钟) -
http-basic-timeout控制单次 HTTP 请求(GET zip 包、校验 checksum),Composer 2.2+ 才支持,建议设为300~600 - 临时生效:用命令行参数,例如
composer install --process-timeout=1200 --http-basic-timeout=300 - 永久生效:运行
composer config -g process-timeout 1200和composer config -g http-basic-timeout 300 - 值设为
0表示不限时,不建议——可能卡死无响应,掩盖真实错误(如权限不足、磁盘满)
换镜像源比加 timeout 更治本
单纯加 timeout 是“等得更久”,不能解决网络抖动、DNS 污染、packagist.org 回源慢的问题。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
推荐操作:
– 切阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
– 关闭 packagist.org 回源(防止 fallback 拖慢):composer config -g repos.packagist.org false
– 强制用 dist 包而非 git 源:composer install --prefer-dist(避免 git clone 卡住)
– 若项目含私有 git 包,确保已配 github-protocols=https:composer config -g github-protocols https
验证是否生效:composer config -g repo.packagist 应输出对应 URL;composer install -vvv 的下载地址应为镜像域名,而非 packagist.org。
容易被忽略的几个关键点
大型项目超时往往不是单一原因。除了网络和超时配置,还要检查:
– PHP 的 memory_limit 是否足够(composer update 解析锁文件阶段吃内存,建议 ≥ 1.5G)
– post-install-cmd 脚本是否卡顿(如 php artisan key:generate 在非交互模式下卡住,加 --no-interaction 测试)
– 是否在 Docker 或 CI 中执行:容器本身可能有 --stop-timeout 限制,Composer 看不到这一层中断
– composer.lock 文件是否过大(>10MB):冗余字段、未清理的 require-dev 会拖慢 JSON 解析,定期运行 composer update --lock 可压缩










