答案是先看终端Downloading行URL:若为packagist.org说明镜像未生效,若为镜像地址才排查同步;再curl验证镜像元数据接口,删对应缓存子目录而非clear-cache,最后用临时切源法归因。

看日志里到底请求了哪个 URL
Composer 报 Could not find package 时,第一眼不是查缓存或换镜像,而是盯紧终端输出的 Downloading https://... 那行。如果它下载的是 https://packagist.org/,说明镜像根本没生效——配置错、被项目级 repositories 屏蔽、或键名写成 repos.packagist(新版要求单数 repo.packagist);如果下载的是 https://mirrors.aliyun.com/composer/,才真正进入“镜像是否同步”的排查链路。
手动 curl 镜像包元数据接口
别信 composer show 或网页搜索结果,它们都可能读缓存。直接验证镜像服务端有没有这个包:
- 运行
curl -I https://mirrors.aliyun.com/composer/p/vendor/package-name.json(把 vendor/package-name 替成实际值) - 返回
HTTP/2 200且Last-Modified时间戳在 30 分钟内 → 镜像有,问题在本地缓存 - 返回
404或Last-Modified滞后超 30 分钟 → 镜像未同步,等或换源 - 同时打开
https://packagist.org/packages/vendor/package-name确认官网已发布
删对缓存目录,不是 composer clear-cache
composer clear-cache 不会动 packages.json 元数据缓存,它只清 ZIP 包和 dist 文件。Composer 默认复用 15 分钟内未过期的元数据快照,哪怕镜像已更新,它也继续读旧索引。
- 先查路径:
ls -d $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer - 删掉整个目录:
rm -rf ~/.composer/cache/repo/https---mirrors-aliyun-com-composer(Windows 对应%APPDATA%\Composer\cache\repo\https---mirrors-aliyun-com-composer) - 再跑
composer show vendor/package-name,这时才会强制拉新元数据
临时切回官方源快速归因
不改任何配置,单次命令验证是不是镜像的问题:
- 执行
composer config --global repo.packagist composer https://packagist.org - 立刻跑
composer require vendor/package-name -vvv,观察是否成功下载dist包 - 若成功 → 问题出在镜像;若仍失败 → 检查包名拼写、
minimum-stability、或私有源干扰 - 验证完记得切回镜像:
composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/
最常被忽略的是:项目根目录 composer.json 里只要出现 "repositories" 字段(哪怕只是空数组 []),就会彻底屏蔽全局镜像配置,此时所有排查都得基于项目级配置展开。











