Composer怎么清理旧版缓存 Composer怎么释放C盘存储空间【建议】

0次阅读

能,但效果有限——它只清掉 Composer 全局缓存(如 cache/files/、cache/dist/ 等),通常几 GB,不清理项目 vendor/ 或临时文件,无法显著释放 C 盘空间。

Composer 怎么清理旧版缓存 Composer 怎么释放 C 盘存储空间【建议】

composer clear-cache 能不能直接释放 C 盘空间?

能,但效果有限——它只清掉 ~/.composer/cache(Windows 是 %APPDATA%Composercache),这部分通常占几 GB,对动辄几十 GB 的 vendor/ 来说只是“毛毛雨”。真正吃 C 盘的,往往是项目里反复 composer install 留下的旧 vendor/、没删干净的 node_modules/,或者 Composer 在 %TEMP%C:Users……AppDataLocalTemp 解压 zip 时爆掉的临时文件。

  • composer clear-cache 清的是全局缓存,不碰任何项目目录,安全
  • 它默认会删掉 cache/files/(zip 包)、cache/dist/(解压后 dist)、cache/repo/(包索引快照)、cache/vcs/(git 克隆的裸仓库)
  • 如果你刚在 C 盘装了十几个 Laravel 项目,每个都带完整 vendor/,那清缓存根本救不了命,得动手砍 vendor/

怎么精准清理旧版包缓存,而不是全盘清空?

Composer 没有 composer prune-cache --unused 这种命令。所谓“旧版”,是指你的所有项目当前 composer.lock 文件里 完全没引用 的包版本,比如缓存里存着 monolog/monolog/1.20.0.zip1.25.0.zip2.4.0.zip,但你所有项目 lock 文件里只写了 2.4.0,那前两个就是冗余。

  • 先确认缓存位置:composer config --global cache-dir
  • 进入 cache/files/,按包名分目录,每个子目录下是 版本号。zip
  • 手动比对:打开一个项目的 composer.lock,搜 "name": "monolog/monolog",看 "version" 字段值;再检查其他项目,汇总出所有“正在用”的版本
  • 删除其余 zip 文件(别删整个包目录,只删不用的版本)
    示例(Linux/macOS):find ~/.composer/cache/files -name "monolog-monolog-1.20.0.zip" -delete

注意:cache/vcs/ 下的 git 仓库可以整目录清:rm -rf ~/.composer/cache/vcs/*,下次需要时自动重建,很安全;但 cache/repo/packagist.org/ 别碰,删了首次 composer update 会卡很久。

为什么清完缓存,C 盘还是满?可能是 inodes 耗尽

尤其 Windows WSL 或 macOS 使用 APFS 时,composer clear-cachedf -h 显示磁盘还有 20GB,却报 disk quota exceededNo space left on device——这大概率是 inodes(文件节点)满了。

  • Composer 缓存含海量小文件(每个 zip、每个 JSON 元数据、每个 VCS 提交哈希都是独立 inode),~/.composer/cache/vcs/ 尤其恐怖
  • 查 inodes 使用率:df -i,如果 Use% 接近 100%,哪怕空间剩得多也写不了新文件
  • composer clear-cache 是最有效的 inodes 释放手段之一,因为它批量删掉成千上万个缓存小文件
  • 若仍不够,就得查哪边在疯狂生成小文件:比如 CI 脚本反复 composer create-project 却不清理、或用了 hirak/prestissimo 插件导致临时文件残留

Windows 用户特别注意:C 盘缓存路径和临时目录要一起改

默认情况下,Composer 缓存虽在 %APPDATA%Composercache(通常是 C 盘),但下载解压过程大量依赖系统临时目录:%TEMP%%SystemRoot%Temp,这两个十有八九也在 C 盘。

  • 光改缓存路径没用:composer config --global cache-dir D:composer-cache
  • 必须同步重定向临时目录:
    • PowerShell:$env:COMPOSER_CACHE_DIR="D:composer-cache"; $env:TMP="D:tmp"; $env:TEMP="D:tmp"
    • 或永久写入系统环境变量,重启终端生效
  • 验证是否生效:composer config --global cache-direcho %TMP% 应都指向非 C 盘路径

不改 TEMP,遇到大包(如 symfony/symfony)解压时依然可能因 C:WindowsTemp 满而失败,错误信息常是 failed to open stream: No space left on device,但实际是临时目录撑爆了。

缓存不是越久越好,旧包版本不清理,inodes 和磁盘空间都会悄悄见底;手动删 zip 比全量 clear-cache 更省事,但得盯住 composer.lock 里到底用了哪些版本。

星耀云
版权声明:本站原创文章,由 星耀云 2026-03-15发表,共计2070字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources