能,但只清理过期(默认6个月)和超限(默认300MiB)的缓存文件;--gc不按包版本去重,vcs目录需手动清理,且安装版本由composer.lock决定而非缓存。

composer clear-cache --gc 能自动清理过期缓存吗
能,但只清“过期”和“超限”的文件,不是只留最新版本。--gc(garbage collection)会根据两个配置项判断是否该删:cache-files-ttl 和 cache-files-maxsize。默认 cache-files-ttl 是 6 个月,cache-files-maxsize 是 300MiB。只要缓存文件没超时、没超标,哪怕有 10 个历史版本的 vendor/package zip 包,它也不会动。
怎么让 Composer 只保留每个包的最新 dist 包
Composer 本身不提供“按包去重、只留最新”的清理逻辑——它把每个 dist 包当独立文件存,不记录版本关系。想实现“每个包只留最新”,得靠组合操作:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先运行
composer clear-cache --gc,触发 TTL 和 size 的基础回收 - 再手动清理
vcs/目录:它存的是 Git 裸仓库镜像,单个就占 300–800 MB,且clear-cache默认跳过它 - Linux/macOS 执行:
rm -rf $(composer config --global cache-dir)/vcs/* - Windows 执行:
rd /s /q "%APPDATA%\Composer\Cache\vcs" - 确认
cache-files-maxsize已调高(比如"500MiB"),否则 GC 频繁触发反而保留不住新包
为什么删完缓存,下次 install 还是下老版本
因为缓存清理 ≠ 版本选择逻辑重置。Composer 安装哪个版本,取决于:composer.json 的约束、composer.lock 锁定结果、以及当前可用的 dist 包哈希值。即使你清空了所有缓存,只要 composer.lock 里写的是 v1.2.3,它就会优先找这个版本的 dist 包——如果本地没有,就重新下载;如果有,就直接解压复用。所以“只留最新”真正起效的前提是:composer update vendor/package 或全量 update 后生成新 lock 文件,再配合缓存 GC。
容易被忽略的关键点
cache-files-ttl 控制的是 dist 包文件本身的过期时间,不是“包版本”的生命周期;vcs/ 目录不参与 GC,却最占空间、最耗 inode;而真正决定你装哪个版本的,永远是 composer.lock,不是缓存里存了几份 zip。

















