Resolving dependencies卡住主因是DNS解析慢,需验证nslookup耗时、设COMPOSER_DISABLE_PACKAGIST=1、指定国内DNS(如223.5.5.5)并确认镜像URL正确;Downloading卡住才调http-timeout;Cloning或Executing command卡住属子进程问题。

Resolving dependencies卡住就是DNS问题,不是网络慢
看到 Resolving dependencies 长时间没反应,基本可以确定是 DNS 解析拖慢了 Composer 初始化阶段——它会在读取镜像源前,先尝试解析 packagist.org 或镜像域名(如 mirrors.aliyun.com)的 IP 地址。哪怕你已经设了国内镜像,这步健康检查仍会触发。
验证方法很简单:time nslookup packagist.org 和 time nslookup mirrors.aliyun.com。如果耗时 >1s,而 ping 很快,那 DNS 就是瓶颈。
- 别只改
composer config -g repo.packagist,这不影响初始 DNS 查询 - 必须配合系统级 DNS 设置:Linux/macOS 改
/etc/resolv.conf,Windows 改网络适配器 IPv4 的 DNS 服务器,填223.5.5.5和119.29.29.29 - 加环境变量彻底跳过健康检查:
COMPOSER_DISABLE_PACKAGIST=1,再跑命令
Downloading卡住要调http-timeout,不是process-timeout
如果 -vvv 输出停在类似 Downloading https://mirrors.aliyun.com/composer/p/provider-2023-07/xxx.json,说明 HTTP 请求本身超时了。这是单次请求卡死,和总耗时无关。
http-timeout 控制每次 HTTP 连接(含 DNS、TLS 握手、首字节等待、body 下载)的最大秒数,默认仅 60 秒。大包或镜像首字节延迟高时,它最先触发失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 设为
600是稳妥值:composer config -g http-timeout 600 - 设成
0表示禁用超时,CI 环境不建议,容易无限挂起 -
process-timeout是管整个命令生命周期的(比如解压、执行脚本),别混用
临时项目或CI里直接用--repository-url最干净
不想动全局配置、又怕环境变量污染?--repository-url 参数能绕过所有镜像和健康检查逻辑,连 packagist.org 的 DNS 查询都省了。
它强制 Composer 只从指定 URL 拉取元数据,不查任何其他源,适合 CI 构建、Docker 构建或测试新镜像。
- 示例:
composer install --repository-url=https://mirrors.tencent.com/composer/ - 这个参数优先级最高,比
config -g和环境变量都强 - 注意 URL 末尾不要带
/packages.json,只写基础地址
为什么换镜像后还卡在Cloning或Executing command
这已经不是 Composer 超时的问题了,而是子进程(比如 git clone、unzip)卡死。常见于私有包、GitHub API 限流、或 WSL2 文件系统性能问题。
看 -vvv 最后一行:如果是 Executing command (CWD: ...): git clone 或 Cloning into,那就得从 Git 层或 PHP 配置入手。
- 私有 GitHub 包必须配 Token:
~/.composer/auth.json里加{"github-oauth": {"github.com": "xxx"}} - 避免
--prefer-source,改用--prefer-dist强制下 ZIP 包,跳过 Git 克隆 - WSL2 用户注意:
composer install卡在 autoload 生成,大概率是 symlink 解析慢,可加--no-scripts --no-plugins快速验证
-vvv 最后一行输出里,而不是报错信息本身;DNS、HTTP、子进程三者超时机制完全不同,调错参数只会白等。

















