composer全局镜像唯一生效配置是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,必须严格包含-g、正确键名、composer类型及末尾斜杠url,缺一静默失效。

composer config -g repo.packagist 是唯一生效的镜像配置点
Composer 3.x+ 把 Packagist 元数据源硬编码为 https://repo.packagist.org,改 repositories 数组完全无效——它只影响非 packagist 类型的私有源。真正覆盖元数据请求路由的,只有 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 这一条命令。
常见错误包括:
- 漏掉
-g,导致只在当前项目生效,换目录就失效 - 手写
~/.composer/config.json,格式出错或意外覆盖auth字段 - 项目级配置和全局配置冲突:若
composer.json里也声明了packagist类型源,项目配置优先级更高
验证是否生效:运行 composer config repo.packagist,输出应为 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};再执行 composer show packagist/support,URL 字段必须含镜像域名。
为什么 packages.json 和 provider-*.json 请求会卡住或 404
Packagist 的元数据不是单个大文件,而是分片索引:packages.json 里包含 provider-includes 映射,每个 provider-2024-01$xxx.json 或 provider-laravel~10.0.json 对应一个时间区间或包名前缀。镜像同步有延迟,常滞后几小时。
典型现象:
-
composer install卡在 “Downloading https://mirrors.aliyun.com/composer/p/provider-laravel~10.0.json” -
composer diagnose报Could not fetch packages.json,但curl -I https://mirrors.aliyun.com/composer/packages.json返回 200
定位方法:
- 用
curl -I对比镜像与官方源的同一 provider 文件(如https://mirrors.aliyun.com/composer/p2/laravel/framework/10.0.0.jsonvshttps://repo.packagist.org/p2/laravel/framework/10.0.0.json) - 若官方存在、镜像返回 404,说明未同步,可临时切中科大源:
composer config -g repo.packagist composer https://mirrors.ustc.edu.cn/composer/
并发下载调到 15 才能压满带宽
Composer 2.2+ 默认启用并行下载,但并发数仅设为 5,对国内镜像节点多、延迟低的特点过于保守。实测将 parallel-downloads 提到 15 后,整体安装耗时下降 40%~60%。
操作方式:
- 查当前值:
composer config -g parallel-downloads - 设为 15:
composer config -g parallel-downloads 15 - 别设到 20+:DNS 解析易超时,触发
Failed to decode response或连接拒绝
注意:这个参数只加速 .zip 或 .tar 包下载,不影响元数据请求;但元数据快 + 下载快,才是真实体感提速的关键组合。
删 vendor 和 composer.lock 才能让镜像真正起效
镜像只干预两个环节:元数据查询(packages.json、provider-*.json)和 dist 包下载(dist.url)。而 composer.lock 里存的是上次解析出的完整下载地址——如果它记录的是原始 GitHub ZIP 地址(如 "url": "https://api.github.com/repos/laravel/framework/zipball/v10.0.0"),Composer 就会跳过镜像直连 GitHub,换源完全无效。
所以每次切换镜像源后,必须:
- 删掉
vendor/目录 - 删掉
composer.lock - 再执行
composer install
否则你看到的“加速”,只是缓存命中的假象;真正新包、新版本、新依赖树,全靠这一步重置。











