答案是执行composer config -g repo.packagist:输出为空说明直连官方源https://packagist.org/,输出{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}才表示镜像生效;漏-g、拼错键名、URL缺结尾斜杠或项目级repositories字段覆盖均会导致静默失效。

不是镜像挂了,也不是包没了——90% 是你当前配置的源根本没生效,或者压根没去那个源查。
composer config -g repo.packagist 输出为空?说明根本没走镜像
这条命令是唯一能快速确认全局镜像是否写对的途径。输出为空,代表 Composer 正在直连 https://packagist.org/;如果输出类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},才说明镜像已启用。
- 漏掉
-g参数(比如只运行composer config repo.packagist)查的是当前项目配置,容易误判 -
repo.packagist不能拼成repos.packagist或packagist.org,错一个字符就静默失效 - URL 必须以
/结尾,https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会拼出错误路径导致 404) - 必须带
composer这个 type 参数:composer config -g repo.packagist composer https://xxx/
项目里有 repositories 字段?默认源已被完全屏蔽
只要 composer.json 里写了 "repositories" 数组,无论内容是否为空,Composer 就会忽略全局镜像和默认源——它只查你列出来的地址。
- 常见错误:只加了一个私有 Git 仓库,却忘了补上 Packagist 官方源,结果连
monolog/monolog都找不到 - 正确写法必须包含两部分:
{"packagist.org": false}(关闭自动注入)+ 一条"type": "composer"的官方源条目 - 顺序很重要:
{"packagist.org": false}必须是数组第一项,否则无效 - 验证方式:
composer config repositories输出里,不应再出现https://repo.packagist.org
composer show vendor/package 返回空?先绕过缓存再查
composer show 默认读本地元数据缓存,不是实时网络请求。返回空 ≠ 包不存在,很可能是缓存过期或镜像还没同步。
- 用
composer show -a vendor/package --no-cache强制走网络,看真实响应 - 如果
--no-cache能查到,说明本地元数据缓存残留,删掉对应目录:rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer(路径按你镜像 URL 转义) - 如果仍为空,用
curl -I https://mirrors.aliyun.com/composer/p/vendor/package.json查Last-Modified时间,判断镜像是否同步滞后 - 别依赖
composer clear-cache——它不删元数据缓存,只清 ZIP 和部分 JSON
require dev-main 或 @beta 版本失败?minimum-stability 拦住了
即使包存在、源也对、缓存也清了,composer require vendor/package:dev-main 还是报 “not found”,大概率是稳定性约束在起作用。
-
"minimum-stability": "stable"(默认值)会直接过滤掉所有dev-、-beta、-rc分支或版本 - 临时解决:
composer require vendor/package:dev-main --stability=dev或改composer.json中的minimum-stability - 若要长期支持 beta 版,还得加
"prefer-stable": true配合minimum-stability,否则可能拉到不稳定版本 - 注意:
composer search不受minimum-stability影响,搜得到 ≠ 装得上
最常被忽略的点:你以为配了镜像,其实项目级 repositories 已把它彻底覆盖;你以为清了缓存,其实只是删了 ZIP,元数据还在硬盘上躺着。验证永远比猜测快——composer config -g repo.packagist 和 composer show -a --no-cache 是唯二值得优先跑的命令。











