composer install卡在“Loading composer repositories”是因为默认直连packagist.org时网络链路被阻断,未进入依赖解析阶段;需优先配置国内镜像并清缓存,代理与镜像不可共存。

composer install为什么卡在“Loading composer repositories”
这不是 Composer 本身慢,而是它默认直连 packagist.org,DNS 解析、TCP 建连、TLS 握手全链路在国内常被阻断。现象是命令无报错、无进度、长时间挂起,-vvv 日志里只看到反复重试或最终超时。
常见误判:以为是镜像没配好、composer.json 写错了、或 PHP 版本问题——其实根本没走到解析依赖那步,连源都连不上。
- 先验证是否能通:运行
curl -I https://mirrors.aliyun.com/composer/packages.json,如果超时或返回 403/502,说明网络层已失败 - 别信系统环境变量:
HTTP_PROXY和HTTPS_PROXY默认不生效,Composer 只认自己配置的http-proxy和https-proxy - 必须同时设两个字段,缺一不可;
https-proxy的值必须是http://开头(哪怕代理监听 HTTPS 端口),这是硬性约定
secure-http true 是怎么强制走 HTTPS 的
secure-http 是全局开关,项目级 config 里写无效。它不控制“是否加密”,而是控制“是否允许 HTTP 源”。一旦启用,任何 http:// 协议的仓库地址都会在解析阶段直接报错退出,不会尝试连接。
典型错误信息:The 'http://' URL 'http://packages.internal' is not allowed。不是警告,是 fatal error,命令立即终止。
- 正确开启方式:
composer config --global secure-http true,然后用composer config --global --list | grep secure-http确认输出为secure-http: true (global) - 若必须保留内部 HTTP 仓库,只能在该仓库对象内加
"allow_ssl_downgrade": true,不能写在顶层config或根节点 - 即使开了
secure-http,仍可能遇到cURL error 60—— 这是 CA 证书缺失,不是协议没走 HTTPS;应配ssl.cafile,而非关掉secure-http
代理和镜像能一起用吗
不能。代理和镜像逻辑冲突:镜像本质是换源(repo.packagist 指向阿里云地址),而代理是转发请求(所有 HTTPS 请求经本地代理中转)。两者共存会导致行为不可控,比如部分请求走镜像直连、部分走代理,失败路径难以复现。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
企业内网常见陷阱:CI 脚本里既写了 composer config -g repo.packagist https://mirrors.tencent.com/composer/,又写了 composer config -g https-proxy http://127.0.0.1:8080,结果因优先级混乱导致超时。
- 优先选镜像:国内推荐阿里云或腾讯云镜像,稳定、同步延迟可控(通常 ≤ 5 分钟)
- 代理仅用于无法直连镜像的场景(如某些隔离网络),此时必须 unset 镜像:
composer config -g --unset repo.packagist - 切镜像后务必清缓存:
composer clear-cache,否则旧失败记录残留,重试仍走原地址
HTTPS 隧道不通的典型现象和验证法
代理配了但 composer install 仍卡住,大概率是代理不支持 HTTPS CONNECT 隧道。Composer 对 HTTPS 请求会发 CONNECT packagist.org:443,若代理拒绝或静默丢包,就表现为无响应或 TLS 错误。
错误日志里看不到明确提示,只有 cURL error 35(SSL connect error)、cURL error 7(Failed to connect)或超时。
- 手动验证隧道:运行
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json,如果也卡住或报 407/502,说明代理层有问题 - Clash 用户需确认规则含
DOMAIN-SUFFIX,packagist.org,PROXY;Squid 用户需检查connect_ports是否放开 443 - NTLM 代理(如 Windows 域环境)原生不支持,必须用
cntlm或px做中转,让 Composer 连本地127.0.0.1:3128
最易被忽略的是:https-proxy 值填错协议头(比如写成 https:// 或漏掉 http://)会导致静默 fallback 到直连,没有任何 warning,排查时得靠抓包或 -vvv 看实际请求 URL。

















