Composer self-update –clean-backups 清理旧版本备份文件【维护】

9次阅读

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

Composer self-update –clean-backups 清理旧版本备份文件【维护】

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%ComposerCachefilescomposerwindows)。

  • 不会删除当前正在使用的 composer.phar
  • 不会清理 ~/.composer/cache/vcs/git 仓库克隆缓存)
  • 不处理通过包管理器(如 scoopbrewapt)安装的 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%ComposerCachefilescomposercomposer-*.phar(CMD)或 Remove-Item "$env:APPDATAComposerCachefilescomposercomposer-*.phar"(PowerShell)

别指望一次成功就万事大吉——某些旧备份可能因权限或防病毒软件被跳过,得看输出里有没有 Skipped 提示。

text=ZqhQzanResources