配了国内镜像仍慢,主因是仅代理元数据不托管zip包,需删composer.lock和vendor后重装,确保dist.url指向镜像且repo.packagist配置末尾带斜杠、https、键名正确。

Composer镜像只代理元数据,不托管ZIP包
配了阿里云、腾讯云等国内镜像后,composer install 日志里仍出现 Downloading https://codeload.github.com/ 或 Downloading https://api.github.com/,不是配置失败,而是设计如此。Composer 的下载分两层:元数据(包名、版本、依赖关系)走镜像源;实际 ZIP 包默认仍从 GitHub 原地址下载——镜像源本身不托管或重分发 ZIP 文件。
这意味着:哪怕 composer config -g repo.packagist 显示正确,只要 composer.lock 里记录的 dist.url 还是原始 GitHub 地址,Composer 就会照旧直连下载。
- 阿里云、清华、华为等镜像只同步
packages.json和提供 CDN 加速的 dist 包分发节点,不等于“全链路代理” - 私有 Git 仓库、VCS 类型包(
"type": "vcs")完全不受 packagist 镜像影响,始终走原协议克隆 -
--repository参数只改元数据来源,对已锁在composer.lock中的dist.url无效
换源后必须删 composer.lock 和 vendor/ 才生效
这是最容易被跳过的一步。旧 composer.lock 文件里存的是上一次 composer install 或 update 时解析出的完整 dist 地址,包括原始 GitHub URL。不删它,Composer 就按锁文件执行,根本不查新镜像源。
正确操作顺序是:
- 先确认镜像配置无误:
composer config -g repo.packagist输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 删除当前项目下的
composer.lock和vendor/目录 - 运行
composer install -vvv,观察日志中Downloading行是否开始出现镜像域名(如mirrors.aliyun.com)或已知加速节点
如果仍看到 codeload.github.com,说明镜像未真正接管 dist 分发——大概率是没删 lock 文件,或镜像服务本身不提供 ZIP 缓存(如部分高校镜像仅同步元数据)。
某些包绕过镜像的典型场景
不是所有包都走 packagist 元数据路径。以下情况会跳过镜像配置,直连 GitHub:
- 项目
composer.json中显式写了"dist": {"url": "https://github.com/xxx/yyy/archive/refs/tags/v1.0.0.zip"}——这个 URL 优先级高于镜像 - 启用了
"prefer-source": true(全局或项目级),此时 Composer 改用git clone,完全不走 dist 下载链路 - 使用了
fxp/composer-asset-plugin等老旧插件,它们自行请求 Bower/NPM 源,不识别repo.packagist配置 - 包注册在私有 Satis/Toran 仓库,且
repositories数组中该源排在packagist前面,Composer 会优先匹配它
验证方式:运行 composer show monolog/monolog,看输出中的 source 和 dist 字段 URL 是否已变成镜像地址;若仍是 github.com,说明该包未被镜像覆盖。
真正加速 ZIP 下载的可行方案
想让 Downloading 阶段也走国内节点,得绕过 GitHub 直连。目前稳定可用的方案只有两个:
-
用 ghproxy 类反向代理:在
composer.json中为 GitHub 域名设重写规则,例如:"repositories": [{"type": "package", "package": {"name": "monolog/monolog", "version": "3.0.0", "dist": {"url": "https://ghproxy.com/https://github.com/Seldaek/monolog/archive/refs/tags/v3.0.0.zip"}}}]——适合关键高频包,不推荐全量手工写 -
企业级部署 Satis 或 Toran Proxy:把 GitHub ZIP 下载后缓存到内网服务器,再配置
repo.packagist指向该内网地址 ——适合 CI/CD 和团队统一加速
个人开发最省事的做法,其实是接受“元数据快 + ZIP 稍慢”的现实,重点确保 composer.lock 清理干净、镜像 URL 正确带斜杠、且没开 prefer-source。其他花式代理,多数在 PHP 8.2+ 和 Composer 2.5+ 下存在兼容性风险,容易引入签名校验失败或 404。











