Composer换源失效因版本键名不匹配或项目级配置覆盖:1.x用repo.packagist,2.2+用repositories.packagist.org;项目composer.json含repositories字段则全局配置失效;需clear-cache并验证config、diagnose及请求URL。

composer config -g repo.packagist 为什么没生效
根本不是命令写错了,而是 Composer 版本和配置键名不匹配,或者被更高优先级的设置盖过去了。
-
repo.packagist是 Composer 1.x 的写法;2.2+ 推荐用repositories.packagist.org,旧键名在部分新版中会被静默忽略 - 项目根目录的
composer.json里只要写了"repositories"字段(哪怕空数组、哪怕只禁用了 packagist),全局配置就完全失效 - Windows 下用 Git Bash 时,
COMPOSER_HOME可能没生效,实际读的是%APPDATA%\Composer\config.json,不是你想象的~/.composer/config.json - 改完不执行
composer clear-cache,元数据还缓存在本地,请求照样发往旧地址
该用哪个命令切阿里云/腾讯云源
别猜路径、别手改 JSON,直接用 composer config 写入,但得按版本选对键名。
- 兼容性优先(适配 1.x 和多数 2.x):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 新版推荐(Composer ≥2.2):
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}' - 腾讯云更容错(默认 fallback 到官方源):
composer config -g repositories.packagist.org '{"type": "composer", "url": "https://mirrors.cloud.tencent.com/composer/"}' - 所有 URL 必须以
/结尾,否则Invalid repository type或 404 ——https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌
换源后还是走 packagist.org?怎么验证真生效了
不能只信命令回显“成功”,得看三处输出是否一致。
- 查配置:
composer config -g repo.packagist.url或composer config -g repositories.packagist.org,输出必须是镜像地址,不是空或packagist.org - 看诊断:
composer diagnose,找到 “Repo:” 那一行,域名必须匹配你设的镜像 - 抓真实请求:
composer show -p | head -3,第一行显示的源域名要是你刚配的;更彻底点,加-vvv跑一次composer update,日志里Downloading的 URL 应含mirrors.aliyun.com或对应域名 - 如果仍不对,立刻检查项目
composer.json里有没有"repositories"字段 —— 有就删掉或临时composer config --unset repositories
临时切源、CI 场景、create-project 卡住怎么办
有些时候你根本不想动全局配置,比如跑 CI、帮同事调试、或初始化一个带固有 composer.json 的模板。
- 单次命令指定源:
composer create-project laravel/laravel demo --repository-url=https://mirrors.aliyun.com/composer/ - 仅当前项目生效(不写进
composer.json):composer config repo.packagist composer https://mirrors.ustc.edu.cn/composer/(注意:没-g) - CI 流水线建议用腾讯云源:
https://mirrors.cloud.tencent.com/composer/,它默认开启 fallback,避免因镜像同步延迟导致构建失败 - 某些老旧脚手架自带
"repositories": {"packagist.org": false}却没配替代源,结果直接找不到包 —— 这时加--repository-url是最安全的兜底方式
最容易被忽略的其实是缓存和项目级配置。改完 composer config 不清缓存,等于没改;项目里有个 repositories 字段,全局配置就自动作废。这两步漏一个,速度就快不起来。


















