发布于2026-07-06 阅读(0)
扫一扫,手机访问
很多人习惯用 composer clear-cache 来清理缓存,以为它能精准删掉那些不再用的旧版本包。实际上,这个命令干的事情比你想象的要简单粗暴得多——它不区分新旧,只要是缓存目录里的,一概清空。换句话说,它只认“存在与否”,不看“是否被项目引用”。清完之后装包变慢,不是因为留下了旧版,而是所有 dist 包都得重新下一遍。
composer clear-cache 不等于“删旧版”先说清楚:这个命令的本质就是全量清空。它不管某个包版本是否还在 composer.lock 里被引用,只要躺在缓存目录下,就一并删除。它不是“过期文件清理”,而是“缓存目录格式化”。所以,如果你指望它只删除 1.20.0 而保留 2.4.0,那结果会让你失望。
更让人困惑的是 composer gc,它只动 vendor/ 下未被 composer.lock 引用的目录,完全不碰缓存里的 zip 或 source 文件。所谓“旧版本包缓存”,实际指的是 ~/.composer/cache/files/vendor/name/hash/version.zip 这类文件——Composer 自身并没有提供按版本号过滤的参数。
这里有个容易被忽略的坑:如果你维护多个项目,各自的 composer.lock 可能引用着不同版本。你对某个包来说“旧”的版本,对另一个老项目恰好是“当前”版本。一旦删错,那个老项目下次 composer install 就会重新下载,甚至因为网络问题卡住。所谓“旧版本”,其实是相对的。
先确认缓存路径:composer config --global cache-dir,然后进入 files/ 子目录操作。注意,别直接删整个 files/,只删确定不用的版本。
具体操作步骤:
grep -A 5 '"monolog/monolog"' composer.lock | grep versionfind /path/to/projects -name composer.lock -exec grep -l 'monolog/monolog' {} \; -exec grep -A 5 '"monolog/monolog"' {} \; | grep version | sort -ufind ~/.composer/cache/files -name "monolog-monolog-1.20.0.zip" -deletecache/vcs/ 目录可以放心整删:rm -rf ~/.composer/cache/vcs/*,下次需要时自动重建,不影响功能Windows 的资源管理器默认不显示完整哈希路径,手动查找容易出错。推荐用 PowerShell 配合 Get-ChildItem 定位:
composer config --global cache-dir,通常返回 %APPDATA%\Composer\Cachefiles\ 后执行:Get-ChildItem -Recurse -Filter "*monolog*1.20.0*.zip" 确认目标文件-WhatIf 参数预览效果:Get-ChildItem -Recurse -Filter "*monolog*1.20.0*.zip" | Remove-Item -WhatIfrepo\ 下的 packages.json——删了它,首次 composer update 会卡在 HTTP 请求上,尤其在国内镜像源 TTL 较长的情况下,影响很明显vendor/,不是缓存一个 Lara vel 项目的 vendor/ 目录常常超过 300MB,而 ~/.composer/cache/ 通常不到 1GB。如果 C 盘告警,优先排查的是 vendor/,而不是急着去清缓存。
具体排查方法:Linux/macOS 跑 du -sh vendor/* | sort -hr | head -3,Windows 用 TreeSize Free 扫 vendor/。真正吃磁盘的主力军往往在这里。
composer clear-cache 对释放 C 盘空间效果有限,除非你恰好把缓存目录配置到了 C 盘(比如 COMPOSER_HOME=C:\Users\Me\.composer)rm -rf vendor && composer install --no-dev,前提是 composer.lock 存在且可信composer install --no-cache 比反复清缓存更省空间、更稳定,是一个更推荐的做法
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8