答案是元数据缓存未刷新导致新包不可见,需用composer update --refresh强制重拉packages.json或手动清除repo缓存目录,并验证镜像配置是否生效。

不是网络不通,也不是 Composer 坏了,而是你本地读的还是几小时前的旧索引——元数据没刷新,新包就等于不存在。
composer update --refresh 强制重拉 packages.json
Composer 默认复用缓存的 packages.json(默认 15 分钟内不更新),哪怕镜像站已同步新版本,它也照旧用旧索引算依赖。结果就是:Packagist 页面显示 monolog/monolog 已发 3.6.0,但 composer update monolog/monolog 却提示 “Nothing to install or update”。
-
composer update --refresh(仅 Composer ≥ 2.5 支持)会丢弃所有缓存的packages.json和provider-*.json,重新从当前配置的镜像源下载最新元数据,不重下 ZIP 包 - 执行后立刻再跑
composer update vendor/package-name,就能识别出刚发布的版本 - 确认镜像地址正确:
composer config -g repo.packagist输出应为https://mirrors.aliyun.com/composer/这类 HTTPS 地址,否则--refresh会去错地方拉 - Composer 2.4 及更早版本不支持该参数,只能手动删缓存目录或临时设
COMPOSER_CACHE_DIR=/dev/null composer update
删错缓存目录 ≠ 清元数据
composer clear-cache 只清 ~/.composer/cache/files/ 下的 ZIP 包和 dist 缓存,对决定“有没有这个包”的元数据完全无效。真正要删的是镜像源对应的 repo 缓存目录:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:
rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer - Windows:
rd /s /q "%COMPOSER_HOME%\cache\repo\https---mirrors.aliyun.com-composer" - 路径中的
https---mirrors.aliyun.com-composer是 URL 转义结果,必须和你当前composer config -g repo.packagist配置的镜像地址严格对应;用了中科大源就得删https---mirrors.ustc.edu.cn-composer - 删完不重启终端、不重跑命令,缓存不会自动重建——得触发一次
composer update或composer show才会拉新
项目级 repositories 会彻底屏蔽全局镜像
哪怕你执行了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,只要项目 composer.json 里写了 "repositories" 字段,Composer 就自动忽略全局镜像,只按你写的 URL 去拉元数据。
- 常见陷阱:模板里写
"url": "https://packagist.phpcomposer.com"—— 该域名已停服,所有请求返回 404 -
"repositories": [{"type": "composer", "url": "https://your-mirror.com"}]必须加"packagist.org": false,否则连monolog/monolog这种基础包都查不到 - 验证是否生效:
composer diagnose看 “Repo packagist.org:” 行输出的 URL 是否为你预期的镜像地址 - 临时绕过项目级配置调试:加
-d repo.packagist=composer参数,如composer show -d repo.packagist=composer spatie/laravel-ray
curl 直接查镜像源状态比猜快十倍
别等 composer show 报错再排查。直接用 curl 验证镜像是否真同步了你要的包:
- 查包是否存在:
curl -I https://mirrors.aliyun.com/composer/p/spatie/laravel-ray.json—— 返回 404 或Last-Modified是几小时前,说明镜像未同步 - 对比官方源:
curl -I https://repo.packagist.org/p/spatie/laravel-ray.json—— 若官方有、镜像无,换源是唯一办法 - 确认镜像本身可用:
curl -I https://mirrors.aliyun.com/composer/packages.json应返回 HTTP 200 - 别信
composer -v日志里 “Resolving dependencies” 那行——那只是开始,真正卡点在后续几百次 provider 请求,curl能提前暴露问题
元数据同步延迟不是 bug,是镜像服务的固有节奏;但误判为网络问题、乱删缓存、忽略项目级配置覆盖,才是最常踩的坑。关键不是“等多久”,而是“怎么确认它到底同步没”。

















