项目级镜像配置必须写入composer.json的repositories对象,显式添加"packagist.org": false并配置阿里云镜像url,改后须删除vendor和composer.lock再执行composer install -vvv验证请求域名。

项目级配置必须写进 composer.json,不是改全局
全局镜像(composer config -g)在 CI、宝塔、Docker 或多用户环境下大概率不生效——因为 runner、www 或容器里运行的不是你当前登录的用户。项目级配置直接写进 composer.json,拉代码即生效,行为可预期。
进项目根目录(确保有 composer.json),执行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
注意:不加 -g。这条命令会自动在 composer.json 的 repositories 字段下添加一个 "packagist" 条目,结构如下:
"repositories": {
"packagist": {
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
}
- 如果原
composer.json中"repositories"是空对象{},命令会安全合并 - 如果是数组
[],命令会失败;需先手动改为{}再执行 - 不会覆盖已有私有源(如
"my-private"),前提是原repositories是对象而非数组
packagist.org 必须显式禁用,否则镜像不生效
Composer 默认仍会把 packagist.org 当作兜底源。即使你配了国内镜像,它仍可能先尝试官方源再 fallback,导致卡在 “Loading composer repositories” 或报 404。
在 composer.json 的 repositories 对象里,必须加这一行:
"packagist.org": false
完整结构示例:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"repositories": {
"packagist": {
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
},
"packagist.org": false
}
- 别手写
"packagist.org": true—— 这等于没关,依然走官方源 - 也别漏掉
"packagist.org": false,否则镜像只是“备选”,不是“唯一” - 这个字段必须和
"packagist"同级,都在repositories对象里
换源后要重装,composer.lock 里的旧地址会拖后腿
composer.lock 文件里记录的是每个包的 dist.url,它指向原始下载地址(比如 https://api.github.com/... 或 https://packagist.org/...)。哪怕镜像已生效,composer install 仍会优先尝试 lock 文件里的旧 URL —— 导致超时或失败。
必须做三件事:
- 删掉
vendor/目录 - 删掉
composer.lock - 运行
composer install -vvv,观察日志中是否出现mirrors.aliyun.com
不要只跑 composer update:它只更新依赖版本,不重走镜像解析流程;只有清空 lock 并重装,才能让 Composer 完全基于新镜像重新抓取元数据和包列表。
验证是否真走镜像,别信“好像快了”
终端没报错 ≠ 镜像在用。真正验证要看三点:
- 运行
composer config repo.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 运行
composer diagnose,看 “Repo” 行是否显示阿里云地址,而不是https://packagist.org - 执行
composer install -vvv,日志里出现的第一批 HTTP 请求域名必须是mirrors.aliyun.com,不是packagist.org
最容易被忽略的是:某些老项目 composer.json 里已有 "packagist.org": false 却没配镜像,结果直接失败;或者 CI 脚本里用了 --no-plugins 导致自定义 repository 解析被跳过——这些都得单独排查,不能只盯着镜像 URL。










