Composer配置国内镜像生效需满足三点:repo.packagist(非repos)、type为composer、URL以/结尾;验证须输出完整JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。

composer 配置中文镜像本身不难,但配错就完全没效果——绝大多数“换源后还是慢”的问题,都出在命令写错、路径少斜杠、或被项目级配置静默覆盖。
为什么composer config -g repo.packagist总不生效
不是命令没运行,而是三个细节一错全废:
-
repo.packagist不能写成repos.packagist(多一个s就彻底无效,且不报错) - URL 必须以
/结尾:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(少斜杠会拼出/p2//类路径,直接 404) - 必须加
-g:漏掉就只改当前目录的composer.json,换个项目就失效
验证是否成功:运行 composer config -g repo.packagist,输出应是完整 JSON,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null 或报错,说明没写进去。
composer install 还卡在 “Resolving dependencies”?镜像根本不管这事
镜像只加速下载,不加速依赖解析。这个阶段卡住,和网络无关,典型诱因有:
-
composer.json里写了太宽的约束,比如"php": "^7.4 || ^8.0 || ^8.1",让求解器暴力试遍所有组合 - 存在
"minimum-stability": "dev",强制拉取不稳定分支,候选版本数爆炸 -
composer.lock被删或没提交,install实际退化为update - 项目
composer.json中repositories字段指向了已下线私有源,Composer 逐个超时才 fallback
快速排查:进项目根目录,执行 composer config --list | grep repositories,看实际生效的是哪个源;再跑 composer validate --strict 确认 lock 文件合法。
composer install 加哪些参数才算真正提速
光换镜像只是第一步,生产环境必加这四个:
-
--no-dev:跳过require-dev(如phpunit),省掉 30–60% 时间 -
--prefer-dist:强制走 ZIP 包,避免git clone的 I/O 和网络开销 -
--optimize-autoloader(或-o):生成静态类映射,PHP 7.4+ 下可进 opcache -
--classmap-authoritative(或-a):仅限部署用,告诉自动加载器“没在映射里=真没有”,彻底跳过文件扫描
CI/CD 中推荐组合: composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative --no-interaction --no-progress。注意:--classmap-authoritative 在本地开发中禁用,否则新增类会直接 Class not found。
别再碰 hirak/prestissimo 和 fxp/composer-asset-plugin
这两个插件在 Composer 2.x 中已彻底失效:
-
hirak/prestissimo:Composer 2.2+ 原生支持parallel-downloads,装了反而可能引发静默降级或冲突;已装请立刻卸载:composer global remove hirak/prestissimo -
fxp/composer-asset-plugin:官方废弃多年,严重拖慢依赖解析,且与现代 npm/bower 管理方式不兼容,直接删
检查是否残留:运行 composer diagnose,若输出里还有 hirak/prestissimo 提示,说明全局 vendor 没清干净,得手动删掉 ~/.composer/vendor/hirak 目录。
最易被忽略的点:换源后不 clear-cache,旧缓存仍连海外元数据;项目级 repositories 配置优先级高于全局,却常被忘记检查。


















