必须在项目 composer.json 的 repositories 字段中显式禁用 packagist.org 并配置镜像源,否则会回退官方源;需执行 composer clear-cache 清缓存,并用 composer update -vvv 验证请求 url 是否为镜像地址。

如何在当前项目中仅修改 Composer 镜像源(不改全局配置)
直接改 composer.json 不能生效——Composer 不从 composer.json 读取镜像源。所谓“局部设置镜像”,本质是通过项目级配置文件覆盖默认行为,而非编辑依赖声明文件本身。
必须用 composer.json 同级的 composer.config.json?错,实际是 composer.json 内嵌 repositories
局部镜像的正确做法是在项目根目录的 composer.json 中添加 repositories 字段,**且必须把 packagist.org 显式声明为第一个仓库,并禁用其默认行为**。否则即使写了国内镜像,Composer 仍会回退到官方源查包。
常见错误写法:
{
"repositories": [
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
]
}
这会导致所有包都走阿里云镜像,但 packagist.org 的元数据(如版本列表、依赖约束)仍被绕过,可能引发 Could not find package xxx 或版本解析异常。
正确写法应包含:
- 显式声明
packagist.org类型为composer,url设为镜像地址 -
packagist键设为false,彻底关闭默认源
{
"repositories": [
{
"packagist.org": false
},
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
]
}
执行 composer update 前要清缓存,否则旧源信息仍可能生效
Composer 会缓存仓库元数据(如 packages.json),即使改了 repositories,若缓存未更新,仍可能拉取旧版本索引,导致安装失败或版本不符。
务必执行:
-
composer clear-cache—— 清除全部缓存(推荐) - 或
rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer/(Linux/macOS)手动删对应镜像缓存目录
注意:仅运行 composer update --no-cache 不足以规避此问题,因为仓库索引本身已缓存,--no-cache 只跳过包下载缓存。
验证是否真正走本地配置的镜像源
最可靠的方式不是看下载速度,而是观察 Composer 输出的实际请求 URL:
运行 composer update -vvv,搜索日志中的 GET 请求行,例如:GET https://mirrors.aliyun.com/composer/p2/topthink/framework.json
如果看到的是 packagist.org 或其他非预期域名,说明 repositories 配置未生效或顺序有误。
另一个快速验证点:
- 临时把镜像 URL 改成一个不存在的地址(如
https://invalid-mirror.test/) - 运行
composer update,若报错中出现该 URL 的连接失败,则证明配置已被识别
别依赖 composer config --list 查看,它只显示全局/用户级配置,不反映 composer.json 中的 repositories 设置。
真正容易被忽略的是 "packagist.org": false 这一行——少了它,Composer 就会在镜像查不到时自动 fallback 到官方源,表面看似能装,实则破坏了“仅限本项目使用镜像”的前提。











