composer clear-cache --expired只删除files/下修改时间超cache-files-ttl(默认180天)的.zip/.tar.gz文件,不检查内容或使用状态,且不清理vcs/和repo/目录。

cache-files-ttl 决定 --expired 删什么,不是“过期包”而是“过期时间戳”
执行 composer clear-cache --expired 时,它不会检查 ZIP 文件内容是否有效、哈希是否匹配,也不管这个包当前有没有项目在用。它只看文件修改时间(mtime)是否超过 cache-files-ttl 配置值,默认是 180 天(即 15552000 秒)。
实际行为等价于 Linux/macOS 下这条命令:find ~/.composer/cache/files -name "*.zip" -o -name "*.tar.gz" -mtime +180 -delete
- 必须先确认 TTL 值:
composer config --global cache-files-ttl,若无输出,说明用的就是默认 180 天 - Windows 上该命令同样有效,底层由 Composer 自行实现,不依赖
find - 如果缓存里全是近三个月下载的包,
--expired很可能显示 “Cleared 0 files” —— 不是命令失效,是真没过期 - 它只动
files/子目录,vcs/和repo/完全不动
国内镜像源元数据缓存(repo/)有独立 TTL,clear-cache 不自动刷新
国内镜像源(如阿里云、腾讯云)的 packages.json 快照存在 repo/ 目录下,其更新受两层控制:镜像服务器 CDN 缓存(通常 24 小时)和 Composer 本地 cache-repo-ttl(默认未显式配置,走 HTTP Cache-Control 头)。composer clear-cache 会清掉 repo/ 全部内容,但下次 composer update 仍可能拉到旧快照,因为镜像源本身还没更新。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 想绕过镜像 CDN 缓存,可临时切回 packagist.org:
composer config --global repo.packagist composer https://packagist.org - 或强制重取元数据:
composer update --no-cache(注意:这不是清缓存,是跳过本次读写) - 私有源若已下线,清
repo/没用,得改composer.json中的repositories配置
vcs/ 目录才是磁盘和 inodes 真正杀手,clear-cache 默认不碰它
~/.composer/cache/vcs/ 存的是 Git 裸仓库(完整 .git),每个 Laravel 或 Symfony 包克隆一次就占 300–800 MB、上万个文件。而 composer clear-cache 默认跳过这个目录 —— 这就是为什么你清完缓存,df -i 的 inodes 使用率还是 99%。
- 安全清理方式:
rm -rf ~/.composer/cache/vcs/*(Linux/macOS)或rd /s /q "%APPDATA%\Composer\Cache\vcs"(Windows) - 更彻底的长期方案:
composer config --global cache-vcs false,之后所有 Git 包强制走--prefer-dist,不再克隆裸仓库 - 删
vcs/前务必关掉杀毒软件或 PHPStorm 的文件索引,否则可能因文件被锁导致失败
手动删指定包缓存要按路径规则来,别直接搜 vendor/name
Composer 没有 composer clear-cache monolog/monolog 这种语法。你要删某个包的 ZIP 缓存,得进 files/ 目录,按 vendor 名转换为路径结构找:
比如 monolog/monolog 对应路径是 ~/.composer/cache/files/monolog/monolog/,不是 vendor/monolog/monolog/ —— 后者是项目 vendor/ 目录,删了项目就崩了。
- 先确认缓存根路径:
composer config --global cache-dir - 再进
files/子目录:cd $(composer config --global cache-dir)/files - 包名中
/会转成目录分隔符:symfony/console→symfony/console/ - 删完立刻生效,下次
composer install会重新下载,但要注意:如果报Failed to extract却没指明 ZIP 路径,大概率是vcs/下对应 Git 仓库损坏,得去那儿删
vcs/ 和 files/ 的生命周期不同,镜像源元数据和本地 ZIP 的过期逻辑也不同;一次 clear-cache 解决不了所有问题,但盲目多删又可能拖慢后续安装。动手前,先查路径、看大小、分目录判断,比直接跑命令重要得多。










