答案是composer 2.2+已废弃repo.packagist键名,必须改用repositories.packagist.org.type和.repositories.packagist.org.url双命令配置,且url须https并以/结尾、缓存需清除、项目级repositories会无条件覆盖全局设置。

镜像配置写了却没生效,不是 Composer 故意不认,而是它对配置格式、执行上下文和版本兼容性极其敏感——写错一个字符、漏一个参数、用户不对、缓存不清、或 Composer 版本升级了,都会导致静默回退到 https://packagist.org,且不报错。
composer config -g repo.packagist 命令在 Composer 2.2+ 中已完全失效
Composer 2.2 起废弃了 repo.packagist 键名,无论你执行多少次 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,配置都不会被读取。命令不报错,但等于白写。
- 真正生效的写法是两条命令必须都执行:
composer config -g repositories.packagist.org.type composer和composer config -g repositories.packagist.org.url https://mirrors.aliyun.com/composer/ - 缺
.type行,或.url少末尾/,会导致请求路径拼错(如/p2/xxx.json变成/composer/p2/xxx.json),返回 404 后直接 fallback - 验证是否生效:运行
composer diagnose,看Repo packagist.org:这一行输出的域名是不是你的镜像地址
项目级 repositories 字段无条件覆盖全局配置
只要项目根目录的 composer.json 里存在 "repositories" 字段(哪怕值是空数组 []、空对象 {},甚至 "packagist.org": false),全局镜像就彻底失效——Composer 不会合并,而是直接忽略全局设置。
- 快速检查:进项目目录执行
composer config repositories,看输出里packagist.org的url是什么 - 临时清除覆盖:运行
composer config --unset repositories(注意没有-g) - 若需保留私有源,别删整个字段,改用
composer config repo.packagist composer https://mirrors.ustc.edu.cn/composer/—— 它会安全追加进repositories数组,不破坏已有 VCS 源
镜像 URL 缺少末尾斜杠 / 或协议不匹配
所有主流镜像(阿里云、腾讯云、华为云、清华源)都要求 URL 以 / 结尾,且必须是 HTTPS。写错一个字符就会触发静默 fallback。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 错误示例:
https://mirrors.aliyun.com/composer(缺/)→ 实际请求变成/composer/packages.json→ 404 - 错误示例:
http://mirrors.aliyun.com/composer/(HTTP)→ Composer 强制拒绝,降级回官方源,且不提示 - 正确写法:
https://mirrors.aliyun.com/composer/、https://mirrors.tuna.tsinghua.edu.cn/composer/、https://mirrors.huaweicloud.com/repository/php/ - 验证方式:
curl -I https://mirrors.aliyun.com/composer/packages.json必须返回HTTP/2 200或HTTP/1.1 200 OK
全局配置只对当前用户生效,而实际执行用户不同
composer config -g 把配置写进 ~/.composer/config.json,但它只对执行该命令的用户有效。宝塔用 www 用户跑命令,CI 用 runner 用户,Docker 容器里可能是 www-data —— 它们都读不到你本地 root 或 yourname 的配置。
- 查真实用户:宝塔终端运行
whoami;CI 日志里找 UID;Dockerfile 里看USER指令 - 给对应用户配:比如是
www,就运行sudo -u www composer config -g repositories.packagist.org.type composer - CI 脚本里别依赖全局配置,改用临时参数更可靠:
composer install --repository-url=https://mirrors.aliyun.com/composer/
缓存未清除,旧元数据仍指向境外地址
Composer 缓存的是 packages.json 和 p/provider-2025-10%24.json 等元数据文件。改了镜像但不清缓存,它仍按旧路径发起请求,结果就是 404、找不到包、锁文件错乱。
- 必须执行:
composer clear-cache - 如果项目已有
vendor和composer.lock,建议一并删除:rm -rf vendor composer.lock,再重装 - 尤其要注意:Composer 2.2+ 在换源后若不清缓存,会继续从旧
packages.json里读取 dist URL,根本不会走新镜像
最麻烦的不是配错,而是“以为配对了”——composer config -g repositories.packagist.org.url 有输出,不代表真在用;composer diagnose 显示 OK,也不代表网络通。唯一可信证据只有 composer install -vvv 日志里第一行的 Downloading https://... 地址。










