镜像未生效的明确标志是日志中仍出现packagist.org;常见原因包括配置项拼写错误、URL缺斜杠、漏写composer类型参数、CI/CD中全局配置无效,以及未删除vendor和composer.lock强制重新生成。

composer install -vvv 里还出现 packagist.org 就说明镜像没生效
镜像配置不是“设了就快”,而是必须让 Composer 在元数据拉取阶段真正走国内源。只要日志里还有 Downloading https://packagist.org/packages.json 或 Reading packages.json from cache at /https---packagist-org/,就代表仍在直连官方源——哪怕你刚跑过 composer config -g repo.packagist。
常见失效原因:
-
repo.packagist写成repos.packagist(多一个 s),Composer 2.9+ 会静默忽略,不报错也不 fallback 提示 - URL 缺末尾斜杠:
https://mirrors.aliyun.com/composer❌ → 拼出/p2//类路径,返回 404 后自动回退到官方源 - 漏掉中间的
composer类型参数:composer config -g repo.packagist https://...❌ → 实际写入的是无效结构,composer config -g repo.packagist输出为空或 null
CI/CD 里用全局配置基本等于白配
GitHub Actions、GitLab Runner、宝塔「一键部署」几乎都不以你本地用户身份运行命令。你在终端用 sudo composer config -g 写进的是 /root/.composer/config.json,但 runner 是 runner 用户,宝塔是 www 用户,它们读的是各自家目录下的配置文件。
可靠做法只有两种:
- 在 CI 脚本中改用临时参数:
composer install --repository-url=https://mirrors.aliyun.com/composer/ - 进项目根目录后执行项目级配置:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g),它会安全写入composer.json的repositories字段,且能提交到 Git,所有环境行为一致
换镜像后还是卡在 api.github.com?这不是镜像问题
阿里云、腾讯云等镜像只代理元数据(packages.json、provider-*.json),zip 包仍从 github.com 或 codeload.github.com 下载。国内访问 GitHub 极不稳定:DNS 解析慢、TLS 握手超时、连接重置频繁——这才是真瓶颈。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
日志里反复出现 Downloading https://api.github.com/ 或 https://codeload.github.com/,说明:
- 镜像已生效(元数据加载飞快)
- 但 dist 包下载环节卡住,和镜像配置无关
- 需配合
--prefer-dist(强制走 zip 包)、禁用 Xdebug、或在 Docker 中显式设置GITHUB_TOKEN提升 API 限速
删 vendor 和 composer.lock 是硬性前提
即使你正确配置了镜像、清了缓存,composer install 仍可能走旧地址——因为 composer.lock 里记录的是旧源下的 dist.url。Composer 不会主动校验这个 URL 是否匹配当前镜像。
必须执行:
rm -rf vendor composer.lock-
composer install --no-cache -vvv(加--no-cache防止读旧缓存) - 观察日志末尾是否出现
Reading packages.json from cache at /https---mirrors-aliyun-com-composer/
项目级配置生效后,新生成的 composer.lock 才会把所有 dist.url 指向镜像站的代理地址。这步跳过,前面全白忙。

















