composer clear-cache 不能解决仓库元数据过期问题,因为它只清除本地 zip 包和部分索引,不刷新 packagist 的 packages.json 快照;元数据缓存分三层,clear-cache 仅清理其中一层,关键需手动删除 repo 缓存、installed.json 和 composer.lock 才能强制更新。

直接运行 composer clear-cache 不能解决仓库元数据过期问题——它只删本地 ZIP 和部分索引,不刷新 Packagist 的 packages.json 快照。
为什么 composer clear-cache 后 composer update 还拉不到新版本?
因为 Composer 的元数据缓存分三层,clear-cache 只清掉其中一层:
-
~/.composer/cache/files/:已下载的 ZIP 包(clear-cache会清) -
~/.composer/cache/repo/https---packagist.org/:远程仓库的packages.json、provider-*.json等元数据快照(clear-cache默认清,但可能残留或未强制重载) -
vendor/composer/installed.json和composer.lock:本地已安装状态和锁定版本(clear-cache完全不碰)
最常卡住的点是:Packagist 上已有 v3.2.0,但 ~/.composer/cache/repo/https---packagist.org/packages.json 里还只有 v3.1.0 的索引,update 就永远看不到新版。
必须手动清理的三个关键位置
只跑 composer clear-cache 不够,得补这三步:
- 删元数据缓存:
rm -rf ~/.composer/cache/repo/https---packagist.org/(Linux/macOS)或rd /s /q "%APPDATA%\Composer\Cache\repo\https---packagist.org"(Windows) - 删本地安装快照:
rm -f vendor/composer/installed.json(避免composer show显示旧版) - 删锁文件:
rm -f composer.lock(否则update仍按旧约束解析依赖)
注意:composer.lock 不是“缓存”,但它是版本滞后的根源——不删它,update 就只是校验,不是重新求解。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
--dry-run -v 验证是否真重拉元数据
清理完别急着 install,先用这个命令确认 Composer 是否真的去远程取了新索引:
- 运行
composer update --dry-run -v - 盯住输出末尾:如果看到
Downloading https://packagist.org/packages.json或Writing /path/to/cache/repo/https---packagist.org/packages.json,说明元数据已刷新 - 如果只显示
Reading /path/to/cache/repo/https---packagist.org/packages.json,说明缓存还在复用旧文件,得再检查路径或权限
常见干扰项:"minimum-stability": "stable" 或 "prefer-stable": true 会过滤掉 RC/Beta 版本,即使元数据更新了也“看不见”。
私有仓库或镜像失效时的额外检查点
如果你用的是公司镜像或 Satis,光清本地缓存没用,还得验证远端是否同步:
- 确认镜像配置键名是
repo.packagist(不是repos.packagist),且type值为composer - 访问镜像 URL(如
https://mirrors.example.com/packages.json)看能否正常返回 JSON - 在
composer update -vvv日志里搜GET行,确认请求发到了镜像地址,而不是packagist.org
镜像配置写对了但日志里还出现 packagist.org,基本等于白配——Composer 根本没加载它。
真正难处理的不是删文件,而是删完后不知道 Composer 是从哪读的数据。每次怀疑元数据过期,第一反应不该是狂删,而是先 composer config --global cache-dir + --dry-run -v 把路径和行为钉死。










