composer clear-cache 仅删除 ~/.composer/cache/(Linux/macOS)或 %APPDATA%\Composer\Cache(Windows)下的 files/、repo/、vcs/、archives/ 四类缓存,不触碰 vendor/、composer.json、composer.lock 及全局配置。

composer clear-cache 删的是哪些东西?
它只动 ~/.composer/cache/(Linux/macOS)或 %APPDATA%\Composer\Cache(Windows)下的内容,包括:files/(下载的 .zip/.tar 包)、repo/(packages.json 和 provider 映射)、vcs/(Git 克隆的裸仓库)、archives/(解压中临时归档)。不会碰 vendor/、composer.json、composer.lock,也不改全局配置。
为什么删了缓存,composer install 还是秒完成?
常见原因有三个:
- 你用的是
--no-cache或环境变量COMPOSER_CACHE_DIR指向了别的路径,clear-cache实际清的是空目录 - 之前用
sudo composer install写过缓存,现在普通用户没权限删,命令看似成功但文件还在 - 某些插件(比如旧版
hirak/prestissimo)或 snap 安装的 Composer 会把缓存隔离在沙盒里,clear-cache根本触达不到
最稳的办法是跳过命令,直接删目录:rm -rf $(composer config --global cache-dir)(Linux/macOS),或 Windows 上用 rmdir /s /q "%APPDATA%\Composer\Cache"。
想只清 metadata 缓存解决“拉不到新版包”?
单纯 clear-cache 不够——它删了快照,但 Composer 下次 update 可能仍复用 vendor/composer/installed.json 和 composer.lock 里的旧约束。真正要动的是这三处:
-
~/.composer/cache/repo/https---packagist.org/:Packagist 元数据主索引,删完首次update会重拉packages.json -
vendor/composer/installed.json:当前已装包的精确版本记录,影响composer show输出 -
composer.lock:不是缓存,但会锁死版本;不删它,update默认只升补丁级
组合执行更可靠:composer clear-cache && rm -rf ~/.composer/cache/repo/https---packagist.org/ && rm -f vendor/composer/installed.json composer.lock && composer update。
path 本地包改了不生效,光清缓存没用
用 "type": "path" 引用本地包时,clear-cache 几乎无效,因为关键状态不在磁盘缓存里:
-
vendor/下的 symlink 没更新,类文件还是指向旧路径 -
~/.composer/cache/vcs/里可能存着旧 Git 快照,干扰源码解析 - 自动加载器没重建,
Class not found是 autoload 问题,不是包没装上
必须手动做三件事:rm -rf vendor/vendor/name、rm -rf ~/.composer/cache/vcs/*、再跑 composer update vendor/name --no-cache,加 -vvv 看日志里是否出现 Reading ./../my-package/composer.json。
缓存路径分散、权限错位、插件私有缓存、inodes 耗尽——这些才是清缓存后问题还在的真实原因,不是命令写错了,而是你没看到它真正藏在哪。











