composer config --global --list第一行输出路径才是真实生效位置;composer 2.0+优先读~/.config/composer/config.json(linux/macos)或%composer_home%\config.json(windows),composer_home可能被重定向,手动编辑易出错,应以命令为准。

composer config --global --list 显示的路径才是真实生效位置
别凭经验打开 ~/.composer/config.json 或 %APPDATA%\Composer\config.json 直接编辑——Composer 2.0+ 默认优先读取 ~/.config/composer/config.json(Linux/macOS)或 %COMPOSER_HOME%\config.json(Windows),而 COMPOSER_HOME 环境变量可能已被重定向。最稳的方式是运行:
composer config --global --list
第一行输出的就是当前实际生效的全局配置文件路径。如果输出为空,说明写入失败或权限不足;如果输出里没有 repo.packagist 字段,那镜像根本没落盘。
手动改 config.json 比 composer config -g 更可靠
命令行方式容易静默失效:漏掉中间的 composer(type 值)、错写成 repos.packagist(多一个 s)、URL 少末尾 /,都会导致配置写进无效字段,且不报错。手动编辑能一眼确认三点是否到位:
- 顶层字段必须是
"repositories"(不是"repo.packagist"对象) - 数组第一位必须是
{"packagist.org": false}(显式禁用官方源) - 第二位是
{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}(url必须以/结尾)
编辑时务必用 VS Code、Notepad++ 或 vim,保存为 UTF-8 无 BOM 编码;避免中文引号、多余逗号、JSON 注释。
/etc/composer/config.json 是唯一跨用户生效的系统级配置
在服务器或 CI/CD 中,composer config -g 只写入当前用户的配置,PHP 实际运行用户(如 www-data、runner)根本读不到。真正能被所有用户读取的唯一路径是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
/etc/composer/config.json
它要求:
- 目录存在且权限为
755,属主root:root - 文件路径严格是
/etc/composer/config.json(不能是/etc/composer.json) -
"repositories"是顶层字段,键名只能是"packagist.org"(大小写、拼写、标点都不能错) - 结构中不能出现
{"packagist": false}这类旧写法,否则报Repository has no URL defined
项目级 repositories 会彻底屏蔽全局配置
只要项目根目录有 composer.json,且里面定义了 "repositories" 字段,全局镜像就自动失效——这是 Composer 的设计逻辑,不是 bug。验证方法很简单:
composer config repo.packagist
如果有输出,说明项目级已覆盖;没输出才轮到全局。常见错误包括:
-
"repositories": [{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}](漏掉"packagist.org": false) -
"repositories": [](空数组也触发覆盖) -
"repositories": {"packagist": {...}}(键名应为"packagist.org")
改完配置后必须执行 composer clear-cache,否则缓存里的旧 packages.json 仍指向 packagist.org,请求不会走镜像。










