阿里云镜像本身不生成缓存,composer 本地缓存仍存于默认 cache-dir;clear-cache 无效主因是 composer.lock 锁版、元数据 ttl 未过期或 vcs 缓存未清,需针对性清理 repo/ 或 vcs/ 目录。

阿里云镜像缓存没被 composer clear-cache 清掉?先确认它真在缓存里
阿里云镜像(https://mirrors.aliyun.com/composer/)本身不额外生成缓存,它只是 Packagist 的代理;Composer 仍把元数据和 zip 包存在本地 cache/files/ 和 cache/repo/ 下。但很多人误以为“用了镜像就缓存路径变了”,其实不会——除非你手动改过 cache-dir 或设置了 COMPOSER_CACHE_DIR 环境变量。
所以第一步永远是:
- 运行
composer config --global cache-dir,看输出是不是你预期的路径(比如/home/user/.composer/cache) - 再用
du -sh $(composer config --global cache-dir)(Linux/macOS)或打开资源管理器查%APPDATA%\Composer\Cache(Windows)确认真实占用 - 如果路径指向 NFS、Docker volume 或公司统一挂载点,
clear-cache只清那个目录,不会扫其他位置
composer clear-cache 为什么对阿里云镜像“装旧包”无效?
清完缓存还装旧版,大概率不是缓存问题,而是:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
composer.lock锁死了版本:哪怕镜像源已更新,composer install仍按 lock 文件还原,不查远程 - 镜像源元数据有 TTL:阿里云镜像同步 Packagist 的
packages.json通常有 24 小时缓存,cache/repo/里旧快照没过期前,Composer 不会重拉 - 你改了私有包 tag,但没删
cache/vcs/下对应裸仓库:Composer 会直接复用本地 git clone 结果,根本不走镜像
cache/repo/ 才关键:rm -rf $(composer config --global cache-dir)/repo/*(Linux/macOS)rd /s /q "%APPDATA%\Composer\Cache\repo"(Windows)
怎么只清阿里云镜像带来的冗余 zip 包?
阿里云镜像下载的 zip 包和官方源一样,都存在 cache/files/,文件名带完整 URL hash,无法靠名字区分来源。但你可以按“是否还在任何项目中被引用”来筛:
- 进
$(composer config --global cache-dir)/files/,里面是按 vendor/name 分目录的,每个子目录下是name-version.zip - 打开所有项目的
composer.lock,搜"name": "xxx/yyy"和"version"字段,汇总出当前实际使用的全部版本 - 只删那些不在任何 lock 文件里出现的 zip(例如
laravel-framework-9.52.0.zip已被所有项目升级到 10.x,这个就可以删) - 别删整个包目录,只删不用的 zip;
cache/files/是安全区,删错不影响功能
cache/vcs/ 可以整删:rm -rf $(composer config --global cache-dir)/vcs/*,下次需要时自动重建,且能省几百 MB 空间 + 避免 inode 耗尽。
CI/CD 里用阿里云镜像,clear-cache 卡住怎么办?
GitHub Actions、GitLab CI 等无交互环境里,composer clear-cache 默认会等用户确认,直接 hang 住。
必须加 --no-interaction:composer clear-cache --no-interaction
更稳妥的做法是预检:composer clear-cache --no-interaction --dry-run,确认输出路径是否指向你期望的位置(比如不是意外指向了 /tmp 或只读 volume)。
如果仍卡住,说明有后台进程锁着缓存目录:
- Linux/macOS:
lsof +D $(composer config --global cache-dir) - Windows(需 Sysinternals):
handle.exe -p php.exe | findstr "Composer"
clear-cache 根本触达不到——这时只能放弃命令,直接 rm -rf 对应沙盒内的缓存目录。










