配了中文镜像仍慢,主因是配置未生效:repo.packagist拼写错误、缺"type":"composer"字段、url末尾无/,三者任一出错均静默回退官方源;parallel-downloads仅在composer 2.2+生效且依赖http/2支持;项目级配置比全局更可靠,需删vendor与lock文件后重装。

配了中文镜像还是慢,大概率不是网络问题,而是配置根本没生效——repo.packagist写错、type字段漏掉、URL末尾缺/,三者任一出错,Composer 2.x 就会静默回退到 https://packagist.org,不报错也不提醒。
为什么composer config -g repo.packagist执行完却没走镜像
这是最常踩的坑:命令看似成功,实际配置被忽略。关键原因有三个:
-
repo.packagist错写成repos.packagist(多一个 s)或packagist.org,Composer 完全不识别该键名 - 命令中漏掉
composer这个type值,例如写成composer config -g repo.packagist https://mirrors.aliyun.com/composer/,会导致 fallback 到默认源 - URL 末尾没加斜杠:
https://mirrors.aliyun.com/composer❌ 会拼接出错并返回 404;必须是https://mirrors.aliyun.com/composer/✅
验证是否真生效,别信“命令没报错”:运行 composer config -g repo.packagist,输出必须是完整 JSON 对象,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报错或只返回字符串,都说明没写进去。
parallel-downloads 设了 10 还是串行下载
这个参数只在 Composer 2.2+ 才真正起作用,旧版本设了等于白设。先确认版本:composer --version,低于 2.2.x 必须升级:composer self-update --prefer-dist。
并发下载还依赖两个前提:
- 镜像源本身要支持 HTTP/2(阿里云、清华镜像已支持;部分小众镜像可能不支持)
-
--prefer-dist必须生效,否则 Composer 会退化为 Git clone,而国内镜像不缓存 source,反而更慢
若出现 file_put_contents(/tmp/): failed to open stream,说明并发过高引发临时文件竞争,立刻降到 6 或 8。
项目级镜像配置比全局更可靠
CI/CD 流水线、宝塔、Docker 容器里,全局配置(-g)基本不可用——它写在 /root/.composer/config.json,但构建通常以 www 或 runner 用户运行,压根读不到。
正确做法是进项目根目录,执行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
这条命令会安全追加到 composer.json 的 repositories 数组里,不破坏已有私有源,也不怕 JSON 格式出错。改完后必须删掉 vendor/ 和 composer.lock,再跑 composer install,否则旧 lock 文件里的哈希仍指向海外源,会报 hash does not match。
换源不是一劳永逸的事——prefer-source 字段可能藏在项目 composer.json 里悄悄关掉 --prefer-dist,私有包若没发布 dist 包,--prefer-dist 会直接失败。这些细节不检查,镜像再快也白搭。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











