如何清除Composer的全局缓存? (clear-cache命令)

10次阅读

composer clear-cache 有时不生效,因其仅清理磁盘持久缓存(如 ~/.composer/cache/),而内存缓存、插件私有缓存或沙盒隔离(如 snap)未被触及,需手动删除目录并配合 –no-cache 使用。

如何清除Composer的全局缓存? (clear-cache命令)

直接运行 composer clear-cache 就能清除全局缓存,但实际执行时可能遇到权限、路径或残留文件问题,导致“看似清了,下次 install 还走缓存”。

为什么 composer clear-cache 有时不生效?

Composer 缓存分两层:内存中临时缓存(命令执行期间)和磁盘上持久缓存(~/.composer/cache/)。clear-cache 只清理后者,但若当前终端会话中 Composer 已加载旧缓存元数据,或某些插件绕过缓存检查,就会误判为“没清干净”。

  • linux/macos 下缓存路径通常是 ~/.composer/cache/,但可通过 composer config --global cache-dir 确认真实路径
  • windows 用户注意:PowerShell 中 ~ 不自动展开,需用完整路径如 C:UsersYourNameappDataRoamingComposerCache
  • 如果 Composer 是通过 snap 安装(ubuntu 默认),缓存可能被沙盒隔离,clear-cache 无法触达真实位置

手动删除缓存目录更可靠

clear-cache 返回 “Clearing cache (cache-dir)” 却无后续提示,或 composer install 仍秒完成,建议跳过命令、直删目录。

  • 先查路径:
    composer config --global cache-dir
  • 再删(Linux/macOS):
    rm -rf $(composer config --global cache-dir)
  • Windows(CMD):
    rmdir /s /q "%APPDATA%ComposerCache"
  • 删完可立即验证:
    ls -la $(composer config --global cache-dir) 2>/dev/null || echo "cache dir gone"

CI/CD 或 docker 环境要额外清理 vendor/bin

全局缓存清理不影响已安装的全局包(如 phpunitlaravel/installer)的二进制软链,这些链接在 vendor/bin/ 下,但全局安装的包本身缓存在 cache-dirrepo/files/ 子目录。若发现 composer global update 不拉新版,大概率是 cache-dir/repo/ 里还存着旧的包索引 jsON。

  • 删缓存后,强制重生成索引:
    composer global update --no-cache
  • Docker 构建中避免缓存复用:在 RUN 指令后加 && composer clear-cache,但更稳妥的是不依赖缓存——用 --no-cache 参数启动 Composer

真正难处理的是 Composer 插件自建的缓存(比如 hirak/prestissimo 旧版会在 ~/.composer/cache/prestissimo/ 单独存档),这类必须查插件文档手动删;不删它们,clear-cache 命令永远看不见。

text=ZqhQzanResources