composer config -g repo.packagist 必须输出完整 JSON 对象(如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"})才生效;空、null、报错、仅URL或返回官方源均表示失败,根本原因是键名、type值或URL格式三者至少缺一。

composer config -g repo.packagist 输出必须是完整 JSON
这是最直接的验证方式,但很多人只看“有没有输出”,忽略格式细节。运行 composer config -g repo.packagist 后,**必须返回形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON 对象**。以下情况都代表失败:
- 输出空、
null或Key "repo.packagist" does not exist - 只返回 URL 字符串(如
https://mirrors.aliyun.com/composer/)——说明 type 字段缺失或命令漏了中间的composer参数 - 返回
https://packagist.org—— 配置根本没写进去,不是网络问题,是键名、type 或 URL 格式三者至少错一个
加 -vvv 看日志里真实请求的域名
配置写了 ≠ 请求真发出去了。缓存、项目级 repositories 覆盖、旧 composer.lock 都会让日志继续出现 packagist.org。唯一可信的是 -vvv 日志里的 Downloading 行:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer install -vvv 2>&1 | grep "Downloading" - 观察每行末尾的域名:必须看到
mirrors.aliyun.com、repo.huaweicloud.com等镜像地址,而不是packagist.org - 如果日志里混着两个域名,说明部分包走了镜像、部分回源——大概率是项目
composer.json里repositories配置不规范,比如用了数组却没设"packagist.org": false
用 curl 模拟 Composer 请求 p2 接口
浏览器访问 packages.json 不可靠,多数镜像会根据 UA 返回 403;只测首页更不行,得直击 Composer 实际拉取元数据的路径:
- 执行:
curl -fsSL --max-time 3 -H"User-Agent: Composer/2.9.6" -H"Accept: application/json" https://mirrors.aliyun.com/composer/p2/monolog/monolog.json | jq -e 'has("packages")' - 返回
0才算通;非零值可能是 SSL 错误、404、空响应或 JSON 解析失败 - 必须用
p2/路径,不能用根路径或packages.json—— 这是 Composer 2.x 实际依赖的接口 - 注意:华为云当前有效地址是
https://repo.huaweicloud.com/repository/php/,不是旧版mirrors.huaweicloud.com
检查是否被项目级 repositories 覆盖
全局配置优先级最低。哪怕 composer config -g repo.packagist 显示正确,只要项目 composer.json 顶层有 repositories 字段,就会直接覆盖:
- 运行
composer config -l | grep repositories,如果输出带项目路径,说明composer.json里写了repositories - 打开项目
composer.json,搜索"repositories":如果是对象({}),检查是否含"packagist.org": false;如果是数组([]),Composer 会默认启用官方源,导致镜像失效 - 临时绕过:在项目目录下运行
composer config --unset repositories,再清缓存composer clear-cache,然后重试
-vvv 日志里那一行真实的 Connected to xxx —— 其他所有检查,都是为确认这一行服务的。

















