淘宝镜像已下线,当前应使用阿里云composer镜像;生效需同时满足:键名为repo.packagist(单数)、含type=composer参数、url末尾带/、加-g全局配置、并执行clear-cache。

淘宝镜像已下线多年,现在执行 composer config -g repo.packagist 很可能返回空或指向 404 地址——不是你配错了,是源本身没了。
为什么 composer config -g repo.packagist 没生效
它静默失败的常见原因就三个,缺一不可:
-
repo.packagist必须是单数,写成repos.packagist或repositories.packagist.org(新版推荐)以外的变体,一律不识别 - 命令里漏掉
composer这个 type 参数:正确写法是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,少这个单词,就只存了个字符串,不是有效源 - URL 末尾必须带
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌——后者请求路径会拼成/composer/packages.json,直接 404 - 没加
-g:命令变成项目级配置,只影响当前目录,换个项目就失效 - 没运行
composer clear-cache:本地元数据缓存仍指向旧地址,install看似卡住,实则根本没发请求到新源
验证镜像是否真在用,别信 config 输出
只看 composer config -g repo.packagist 是否有输出,是假象。得交叉验证三处:
- 运行
composer config -g repo.packagist,输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 运行
composer diagnose,找Repo packagist.org:这一行,后面域名必须是mirrors.aliyun.com,不是packagist.org - 加详细日志跑一次:
composer update -vvv --no-progress | head -n 10,所有Downloading行的 URL 必须含mirrors.aliyun.com,且不能出现packagist.org
临时切源比永久配置更可靠
尤其在 CI、调试、或帮别人跑命令时,硬改全局容易污染环境。更安全的做法是:
- 单次命令指定源:
composer create-project laravel/laravel myapp -r https://mirrors.aliyun.com/composer/ - 仅当前项目生效(不写进
composer.json):composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意无-g) - 完全绕过所有配置强制走某地址:
composer install -vvv --repository-url=https://mirrors.aliyun.com/composer/,适合快速验证镜像可用性
最易被忽略的一点:只要项目根目录 composer.json 里有 "repositories" 字段(哪怕只是空数组),全局配置就彻底失效——优先级永远是项目级 > 全局 > 默认。别只盯着 config -g,先 grep -A 5 '"repositories"' ./composer.json 看一眼再说。











