composer clear-cache 不解决“缓存满”问题,因其仅清理 ZIP 包和 Git 克隆缓存,而真正卡住 update 的是过期 packages.json、vendor/composer/installed.json、composer.lock 及系统 /tmp 或项目分区空间不足。

composer clear-cache 为什么经常不解决“缓存满”问题
它只清 ~/.composer/cache/files/(ZIP 包)和 vcs/(Git 克隆),但真正卡住 update 的是三处元数据和状态快照:过期的 packages.json、已安装包记录 vendor/composer/installed.json、硬编码版本的 composer.lock。磁盘空间不足时,clear-cache 可能删掉几百 MB,但若系统 /tmp 或项目所在分区只剩几十 MB,解压新包仍会直接报 No space left on device。
先确认是不是真磁盘满,还是 Composer 误报
运行 composer clear-cache --dry-run 看输出大小:如果显示 4K 或 No cache files to delete,说明缓存本身没占多少空间,问题不在 Composer 缓存目录;此时应立刻检查系统临时目录和项目所在分区:
- Linux/macOS:
df -h /tmp和df -h . - Windows:看资源管理器里对应盘符剩余空间,或运行
dir /s %TEMP%查%TEMP%是否塞满日志/旧安装包 - WSL 用户特别注意:
/mnt/c/路径下磁盘空间由 Windows 管理,Composer 解压时可能因权限+空间双重限制失败,建议把项目移到~/projects/
删缓存要删对地方,顺序不能乱
真正释放空间且让 update 生效,必须同步清理这四类位置(按顺序):
- 先跑
composer clear-cache(清基础 ZIP 和 vcs,避免干扰) - 再删元数据缓存:
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/(Linux/macOS);Windows 用rm -rf $env:APPDATA\Composer\Cache\repo\https---packagist.org\ - 删本地状态快照:
rm -f vendor/composer/installed.json - 删锁文件:
rm -f composer.lock(最易被忽略——留着它,update 就不会动版本)
删完后别急着 update,先用 composer update --dry-run -v 验证:输出里必须出现 Downloading https://packagist.org/packages.json,否则说明元数据没清干净。
磁盘空间确实紧张时的应急操作
如果 df -h 显示可用空间
- 删掉
vendor/外的冗余大文件:比如storage/logs/、node_modules/(如果你误把它放项目根目录)、dist/构建产物 - 临时改
composer.json的"minimum-stability"为"stable",避免拉取体积更大的dev分支 ZIP - 用
composer install --prefer-dist --no-dev替代update,跳过 dev 依赖和源码克隆,大幅降低解压压力 - CI/CD 中务必显式调用
php -d memory_limit=2G /usr/bin/composer install,否则默认 128M 内存 + 空间不足会静默失败
真正卡住的往往不是缓存目录本身,而是 composer.lock 锁死版本 + /tmp 或项目盘空间见底 —— 这两个点漏掉一个,清理就白做。


















