composer install卡在downloading本质是默认源packagist.org国内访问失败,应全局配置阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,并验证输出为完整json。

Composer install 时卡在 downloading 包,其实是代理没生效
Composer 默认不读取系统 HTTP 代理环境变量(如 http_proxy),也不自动继承终端的 curl 或 wget 配置。你看到它反复重试、超时或卡在 Downloading https://packagist.org/packages.json,大概率是请求根本没走代理——哪怕你在 shell 里已经设置了 export http_proxy=...。
实操建议:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用
composer config -g --unset repos.packagist清掉可能存在的错误镜像源,避免干扰 - 确认代理地址可用:执行
curl -x http://127.0.0.1:7890 https://packagist.org/packages.json -I(把端口换成你代理的实际端口),返回200才算通 - Composer 只认
http-proxy和https-proxy这两个配置项,且必须带协议前缀(http://或https://),写成127.0.0.1:7890会静默失败
用 composer config 全局设代理比改环境变量更可靠
很多人习惯 export http_proxy,但 Composer 的 install、update 命令在某些 PHP SAPI(比如 Apache mod_php)下会丢失环境变量;而 composer config 写入的是 ~/.composer/config.json,所有命令都强制读取。
实操建议:
- 设全局 HTTP 代理:
composer config -g http-proxy "http://127.0.0.1:7890" - 设全局 HTTPS 代理(必须单独设):
composer config -g https-proxy "http://127.0.0.1:7890"(注意:即使代理本身是 HTTP 协议,这里也填http://,不是https://) - 如果代理需要认证,格式为:
"http://user:pass@127.0.0.1:7890",密码里含特殊字符(如@、/)要 URL 编码 - 验证是否写入成功:
composer config -g http-proxy应输出对应地址
脚本中自动检测代理状态并 fallback 到国内镜像
单纯硬编码代理地址不可靠——代理进程可能未启动、端口被占、或公司网络禁止外网代理。稳妥做法是在脚本里先探测代理连通性,失败则自动切到阿里云或腾讯云 Packagist 镜像。
实操建议:
- 用
timeout 3 curl -s -o /dev/null -w "%{http_code}" -x http://127.0.0.1:7890 https://packagist.org/packages.json检测,返回200表示代理可用 - 代理不可用时,执行:
composer config -g repos.packagist '{ "type": "composer", "url": "https://mirrors.aliyun.com/composer/" }' - 注意:设完镜像后,记得清本地 repo 缓存:
composer clear-cache,否则旧包仍可能从原地址拉取 - 不要在脚本里混用
http-proxy和自定义repos.packagist,二者逻辑冲突;优先选镜像(速度快、稳定),代理仅用于必须访问私有包或 dev 分支的场景
Windows 下 PowerShell 脚本调用 Composer 时的代理陷阱
PowerShell 默认不继承 cmd 的环境变量,且 $env:http_proxy 设置后不会自动透传给子进程里的 PHP —— 尤其当 Composer 是通过 php composer.phar 方式调用时,PHP 进程完全看不到这些变量。
实操建议:
- 别依赖
$env:http_proxy = "http://...",直接用composer config写配置 - PowerShell 中执行命令需显式加
&调用可执行文件:& composer install,否则可能报“找不到命令” - 若必须用环境变量(例如 CI 场景),改用
Start-Process php -ArgumentList "composer.phar install" -Environment @{http_proxy="http://127.0.0.1:7890"} - Windows 路径空格和反斜杠容易引发问题,脚本中所有路径统一用正斜杠,如
C:/Users/name/.composer/config.json










