composer clear-cache 只删除全局缓存目录下 files/、repo/、vcs/ 三个子目录,路径由 composer config --global cache-dir 决定,不影响 vendor/、composer.lock、composer.json、php opcache 或 ci 共享卷。

composer clear-cache 到底删什么目录
它只删 Composer 全局缓存目录下的 files/、repo/、vcs/ 三个子目录,路径由 composer config --global cache-dir 决定(Linux/macOS 默认 ~/.composer/cache,Windows 默认 %APPDATA%\Composer\Cache)。不会碰 vendor/、composer.lock、composer.json,也不清理 PHP OPcache 或 CI 挂载的共享卷。
composer clear-cache --expired 清理逻辑和陷阱
composer clear-cache --expired 实际只扫描 files/ 子目录下修改时间超过 cache-files-ttl(默认 180 天)的 .zip 和 .tar.gz 文件,其他目录完全不动。它不校验文件哈希,只看 mtime。
- 运行
composer config --global cache-files-ttl确认 TTL 值;若无输出,就是默认 180 天 - 如果缓存里全是近三个月下载的包,命令可能显示
Cleared 0 files—— 不是失效,是真没过期 - Windows 用户不用管
find命令,--expired在 Windows 上行为一致,底层由 Composer 自行实现
手动删某个包的缓存文件怎么操作
Composer 没有 composer clear-cache monolog/monolog 这种语法,但你可以直接进 files/ 目录按包名删除。路径结构固定:vendor/name/ → vendor/name/ 目录名(/ 转为路径分隔符)。
- 先查路径:
composer config --global cache-dir - 进入缓存 files 目录:
cd $(composer config --global cache-dir)/files(Linux/macOS) - 定位目标包:
symfony/console对应symfony/console/子目录 - 安全删除:
rm -rf symfony/console(注意别漏掉前缀,否则可能误删同名顶层目录) - 删完立刻生效:下次
composer install会重新下载该包,不走本地缓存
为什么清完缓存后 composer install 还装旧版本
这是设计如此,不是命令失效。composer clear-cache 只影响下载缓存,不影响 composer.lock 的版本锁定逻辑。install 仍严格按 lock 文件里的 commit hash 或版本号还原依赖,哪怕缓存全空也不会自动升版。
- 想强制拉新版本,得先删
composer.lock再跑composer update - 如果只是想跳过缓存临时验证某包行为,可用
composer install --no-cache - CI/CD 中频繁清缓存反而拖慢构建——首次 install 会重下所有
.zip和packages.json,尤其含大前端资产的包更明显
composer self-update 比反复 clear-cache 更可持续。











