项目级镜像配置必须在composer.json的repositories字段中严格按数组格式声明,首项为{"packagist.org": false},次项为镜像源,且需清理vendor和composer.lock后执行composer install。

项目级镜像配置不是“改个地址就完事”,它必须写进 composer.json 的 repositories 字段,且结构、顺序、清理动作三者缺一不可;否则 composer install 仍会连 packagist.org,卡在 “Loading composer repositories”。
为什么 composer config repo.packagist 命令不加 -g 却没写进 composer.json
这条命令只在当前目录有合法 composer.json 时才生效,且对 repositories 字段的格式极其敏感:
- 如果原
composer.json中"repositories"是数组([]),命令直接报错退出,不会写入任何内容 - 如果
"repositories"是空对象({}),命令会安全合并,添加"packagist"子项 - 如果
"repositories"字段根本不存在,命令会新建该字段并设为{"packagist": {...}} - 手动写成
"repositories": {"packagist.org": false, "packagist": {...}}是无效的——Composer 2.2+ 要求repositories必须是数组,对象形式会被静默忽略
repositories 数组必须以 {"packagist.org": false} 开头
这是最关键的硬性规则:即使你配了阿里云镜像,只要没显式禁用官方源,Composer 仍会 fallback 到 packagist.org 请求元数据,导致超时或 404。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确结构是:
"repositories": [{"packagist.org": false}, {"packagist": {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}}] - 不能把
"packagist.org": false和镜像配置合并成一个对象,也不能把它放在第二项之后 - 别写
"packagist.org": true或"packagist.org": null,只有false才代表禁用 - 如果已有私有源(如 GitLab 包),应追加在镜像配置之后,保持数组顺序
配完不删 vendor 和 composer.lock 就运行 composer install 必然失败
composer.lock 文件里存的是每个包的原始下载地址(例如 https://api.github.com/ 或 https://packagist.org/),镜像只影响元数据(packages.json)拉取,不影响 lock 文件里的 dist URL。
- 必须执行:
rm -rf vendor composer.lock - 再运行:
composer install(不是update)——只有install会重新基于当前composer.json+ 镜像配置生成新 lock - 若跳过清理,你会看到
file could not be downloaded或反复尝试连接packagist.org - 验证是否真走镜像:加
-vvv运行composer install -vvv,搜索日志中是否出现mirrors.aliyun.com/composer/packages.json
验证是否生效不能只看 composer config repo.packagist 输出
这条命令只读取 composer.json 里已写的内容,不反映实际请求行为。真正有效的验证方式是观察网络请求路径:
- 运行:
composer install -vvv 2>&1 | grep -i 'Downloading\|packages.json' - 成功标志:日志中出现类似
Downloading https://mirrors.aliyun.com/composer/packages.json - 失败标志:出现
https://packagist.org/packages.json或https://repo.packagist.org/packages.json - 额外确认:
composer diagnose输出中Repo packagist.org:行应显示你的镜像 URL,而非默认地址
最常被忽略的一点:项目级配置优先级永远高于全局配置,哪怕你本地 composer config -g 配好了,只要项目 composer.json 里有 repositories 字段(哪怕只是空数组),全局镜像就完全不参与解析——这不是 bug,是 Composer 的硬编码行为。

















