Composer clear-cache与clear-cache –gc的区别及使用场景

16次阅读

composer clear-cache 一次性清除全部本地缓存,包括archives、files、远程元数据及checksum;不支持–gc参数,仅提供全量清除或按archives/files分类型清理。

Composer clear-cache与clear-cache –gc的区别及使用场景

composer clear-cache 是什么,它到底清了哪些东西?

composer clear-cache 是 Composer 官方提供的缓存清理命令,它会**一次性删除所有本地缓存内容**:包括已下载的 .zip/.tar 包归档(archives)、解压后的临时文件(files)、远程仓库元数据(如 packages.json、版本列表)、以及 checksum 校验信息。它不区分“过期”或“正在用”,全部清空。

执行后你会看到类似输出:

Clearing cache (C:UsersAliceappDataLocalComposercache) Cache directory cleared.

该命令适用于以下典型场景:

  • 切换镜像源(如从 packagist.org 改为阿里云镜像)后仍拉不到新版包
  • composer require foo/barNo matching package found,但确认包名和版本完全正确
  • 反复 install 却总解压出旧版代码,或提示 corrupted archive / checksum mismatch
  • 刚删了 vendor 重装,问题依旧复现——说明不是项目级问题,而是全局缓存污染

composer clear-cache –gc 并不存在

Composer **没有内置 --gc 参数**,也**不支持 composer clear-cache --gc 这种写法**。这是常见误解,可能源于对 node.jsnpm cache clean --forcegogo clean -cache 的混淆,或误读某些非官方文档/博客的笔误。

运行该命令会得到明确报错:

[InvalidArgumentException]   Command "clear-cache" is not defined.   Did you mean one of these?       clear-cache       dump-autoload

或者(如果拼写正确但参数非法):

[RuntimeException]   The "--gc" option does not exist.

也就是说:Composer 不提供“垃圾回收式渐进清理”机制,它只有“全量清除”(clear-cache)和“按类型拆分清除”(见下一条)两种粒度。

替代方案:按需清理 archives 或 files

虽然没有 --gc,但 Composer 自 2.2+ 起支持**分类型清理**,更接近“精准回收”的意图:

  • composer clear-cache archives —— 只删 .zip/.tar 等原始包文件(占空间最大,常达几百 MB)
  • composer clear-cache files —— 只删解压后用于安装的临时目录(如 vendor/composer/xxx/ 类结构的缓存副本)

例如,你发现磁盘快满了,但不想重下所有包元数据(避免后续 update 拉取缓慢),就可以只执行:

composer clear-cache archives

这比全量 clear-cache 更轻量,也避免了因元数据缓存丢失导致的首次 update 卡顿。

什么时候该手动删 cache 目录?

极少数情况下,composer clear-cache 命令本身失效(比如权限错误、缓存目录被其他进程锁定、或 Composer 自身损坏),这时可手动清理:

  • 先查路径:composer config cache-dir
  • linux/macOS:rm -rf ~/.composer/cache/*
  • windowsdel /s /q "%LOCALAPPDATA%Composercache"(注意不是 %APPDATA%,新版 Composer 默认用 %LOCALAPPDATA%

⚠️ 注意:手动删除后,Composer 下次运行会自动重建目录结构,但不会自动恢复旧缓存——这点和 clear-cache 效果一致。真正容易被忽略的是:缓存清理不影响 composer.jsonvendor 或锁文件,但它会让下一次 install 变慢,因为所有包都要重新下载

text=ZqhQzanResources