必须同时满足三要素:-g参数、键名repo.packagist(单数)、type值composer及https末尾斜杠,缺一则静默回退官方源;验证需执行composer config -g repo.packagist并确认输出为完整json对象。

composer config -g repo.packagist 命令必须写对三要素
全局换国内镜像,只输一条命令就行,但90%失败不是网络问题,是命令漏了关键成分。缺任意一个,composer install 仍走官方源,且不报错、不提示。
必须同时满足:
-
-g不能省——否则只改当前项目composer.json,换目录就失效 - 键名必须是
repo.packagist(单数,不是repos.packagist或packagist.org) -
composer是 type 值,不是可选参数,也不能省略;填错或漏掉,新版 Composer 直接忽略该配置 - URL 必须是 HTTPS,且末尾带斜杠:
https://mirrors.aliyun.com/composer/(少斜杠会拼出/composerpackages.json导致 404)
验证是否生效:运行 composer config -g repo.packagist,正确输出应为类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报错,说明没写进去。
代理必须同时配 http-proxy 和 https-proxy
只设 http-proxy,composer install 会卡在 Loading composer repositories,无报错、不超时、只干等。这不是镜像问题,是协议路由没通。
Packagist 全量走 HTTPS,而 Composer 对代理是硬分离的:
-
http-proxy只处理 HTTP 请求 -
https-proxy才负责建立 CONNECT 隧道转发 HTTPS 流量 - 漏掉任一字段,HTTPS 请求就 fallback 到直连,在内网/防火墙环境下等于失败
两条命令都得执行:
composer config -g http-proxy http://127.0.0.1:8080<br>composer config -g https-proxy http://127.0.0.1:8080
https-proxy 的值必须仍是 http:// 开头(哪怕代理本身监听 TLS 端口),填 https:// 或省略协议头会静默失效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
密码含 @ / : 时必须 URL 编码
Composer 解析代理 URL 时,只认第一个 @ 为用户/密码分隔符,后面的内容全被截断。比如密码是 pa@ss/word,不编码就填成 http://user:pa@ss/word@127.0.0.1:8080,实际解析出的密码只有 pa,剩余部分丢弃,最终报 Invalid URI supplied 或跳过代理。
解决办法是单独对用户名或密码做 rawurlencode():
- 用
php -r "echo rawurlencode('pa@ss/word');"得到pa%40ss%2Fword - 完整地址写成:
http://user:pa%40ss%2Fword@127.0.0.1:8080 - 域名里带
@(如proxy@corp.com)同样要编码
Windows 下注意路径权限:若 composer config -g 报 Could not write to file,检查 %APPDATA%\Composer\config.json 是否存在且可写。
NTLM 代理必须起本地中转,Composer 原生不支持
公司用 Windows 域环境 NTLM 代理时,无论怎么配 http-proxy,都会返回 407 Proxy Authentication Required 或 Unable to connect to http://repo.packagist.org。这不是你命令写错,是协议层根本不通。
唯一可行解法是本地起中转代理,例如 cntlm 或 px,让它监听 127.0.0.1:3128 并处理 NTLM 认证,再让 Composer 连这个地址:
composer config -g http-proxy http://127.0.0.1:3128<br>composer config -g https-proxy http://127.0.0.1:3128
临时验证是否是 NTLM 问题:运行 curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果 curl 也报 407,说明中转层没配好。
别指望 HTTP_PROXY 环境变量能绕过——Composer 明确忽略它,只认自己的 http-proxy 字段。










