composer self-update --clean-backups 只删除 Composer 缓存目录中旧版本的 composer-*.phar 备份文件,不删 vendor/、composer.lock、全局配置、VCS 缓存或包管理器安装的二进制文件。

composer self-update --clean-backups 到底删什么
它只删除 composer.phar 的旧版本备份文件,也就是每次执行 self-update 时自动保留的上一版(如 composer-2.5.8.phar),不碰你项目里的 vendor/、composer.lock 或全局配置。
这些备份默认存放在 Composer 的缓存目录下,路径通常是:~/.composer/cache/files/composer/(Linux/macOS)或 %APPDATA%\Composer\Cache\files\composer\(Windows)。
- 不会删除当前正在使用的
composer.phar - 不会清理
~/.composer/cache/vcs/(Git 仓库克隆缓存) - 不处理通过包管理器(如
scoop、brew、apt)安装的 Composer
什么时候该加 --clean-backups
当你频繁运行 composer self-update(比如 CI 环境自动更新、或手动测试多个版本),缓存目录里会堆积大量带时间戳或版本号的 composer-*.phar 文件,单个可能几 MB,几十个就占上百 MB。
常见触发场景:
-
du -sh ~/.composer/cache/files/composer/显示该目录 >50MB - 执行
ls ~/.composer/cache/files/composer/ | grep composer-返回十几行以上 - CI 日志报磁盘空间不足,且确认是 Composer 缓存导致
--clean-backups 和 --no-cache 的区别
--clean-backups 是清理旧二进制备份;--no-cache 是跳过本次更新的下载缓存(即不把新 composer.phar 存进缓存目录),二者互不影响,可以同时用:
composer self-update --clean-backups --no-cache
但注意:--no-cache 不会影响已存在的备份文件,它只控制“这次下载的新版本是否落盘到 cache”。
- 加
--clean-backups:删历史备份,保留本次更新后的最新版缓存 - 加
--no-cache:本次更新后不存新版本到缓存,但旧备份还在 - 两者都加:删旧备份 + 本次更新不存新版本 → 缓存目录可能变空
Windows 上执行失败的常见原因
在 PowerShell 或 CMD 中直接运行 composer self-update --clean-backups 可能报错:Could not delete ... Permission denied,这是因为 Windows 锁定了正在运行的 composer.phar 文件(即使命令已结束,PHP 进程释放文件句柄有延迟)。
- 关掉所有终端窗口,再新开一个再试
- 改用 Git Bash(基于 MinGW)通常更稳定
- 如果仍失败,手动删:
del %APPDATA%\Composer\Cache\files\composer\composer-*.phar(CMD)或Remove-Item "$env:APPDATA\Composer\Cache\files\composer\composer-*.phar"(PowerShell)
别指望一次成功就万事大吉——某些旧备份可能因权限或防病毒软件被跳过,得看输出里有没有 Skipped 提示。










