必须同步删除三处缓存:~/.composer/cache/repo/https---packagist.org/(元数据)、composer.lock、vendor/composer/installed.json;否则composer update仍基于旧状态执行,无法拉取新版本。

部署时 composer update 拉不到新版本,不是网络或镜像问题,而是缓存元数据和锁文件没清干净——必须同步删掉三处,否则 update 会照着旧 packages.json 和旧 lock 文件原地打转。
为什么 composer clear-cache 在部署时经常失效
它只清 ~/.composer/cache/files/(ZIP 包)和 ~/.composer/cache/vcs/(Git 克隆),但真正决定“能装哪些新版本”的元数据在 ~/.composer/cache/repo/https---packagist.org/;而 composer.lock 和 vendor/composer/installed.json 是本地状态快照,不删它们,Composer 就认为“一切如旧”。
- CI/CD 环境里常因用户权限错乱(比如用 root 跑过 install,再用普通用户跑 clear-cache)导致部分目录删不掉
- 设置了
COMPOSER_CACHE_DIR但未在部署脚本中导出,composer clear-cache实际清的是空路径 - 执行完
clear-cache后立刻composer update,仍看到Reading /path/to/cache/packages.json—— 说明元数据目录根本没被触碰
部署脚本里必须执行的四步清理
顺序不能颠倒,否则可能白操作:
- 先运行
composer clear-cache(清基础缓存,避免干扰) - 再删元数据:用
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/ - 删本地安装快照:
rm -f vendor/composer/installed.json - 删锁文件:
rm -f composer.lock
Windows 部署需注意:$(composer config --global cache-dir) 在 PowerShell 中要写成 $(composer config --global cache-dir).Trim(),或直接用 $env:APPDATA\Composer\Cache\repo\https---packagist.org\。
验证是否真刷新了远程 metadata
别信“命令跑完了就 OK”,得亲眼看到 Composer 重新拉远端索引:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行
composer update --dry-run -v - 紧盯输出里有没有
Downloading https://packagist.org/packages.json - 如果只有
Reading /path/to/cache/packages.json,说明元数据目录没删对,重走清理步骤
额外提醒:若项目设了 "minimum-stability": "stable",而目标包只发了 dev 或 beta 版本,即使 metadata 刷新了也看不到——这不是缓存问题,是约束本身在过滤。
部署后自动清理的可靠方式
靠人工容易漏,推荐在 composer.json 的 scripts 里加钩子:
{
"scripts": {
"post-update-cmd": [
"rm -f composer.lock",
"rm -f vendor/composer/installed.json"
]
}
}
这样每次 composer update 完自动清理关键状态文件,比全量清缓存更轻、更可控。但注意:这个钩子不会触发 composer clear-cache,元数据目录仍需在部署脚本里显式清理——因为钩子运行在项目上下文,无法安全操作全局缓存路径。
最容易被忽略的是 composer.lock。很多人删了缓存、删了 installed.json,却留着它,结果 update 依然不动——Composer 认为“锁没变,就不该动版本”。










