直接在 composer update 过程中“边更新边清缓存”不可行——composer 没有内置的 --clean-cache-during-update 选项,所有缓存清理必须在 update 前完成,否则 update 会复用旧元数据、旧 zip、旧锁文件,结果还是拉不到新版本。

直接在 composer update 过程中“边更新边清缓存”不可行——Composer 没有内置的 --clean-cache-during-update 选项,所有缓存清理必须在 update 前完成,否则 update 会复用旧元数据、旧 ZIP、旧锁文件,结果还是拉不到新版本。
为什么不能在 update 中实时清缓存
Composer 的执行流程是线性的:先读缓存(repo/ → installed.json → lock)→ 再解析依赖 → 最后下载安装。它不会在中间插入清理动作。所谓“update 时清缓存”,本质是误把 composer clear-cache 当作 update 的子步骤,但两者完全独立,且顺序错不得。
-
composer clear-cache只删~/.composer/cache/files/和部分repo/子目录,不碰https---packagist.org/下的核心元数据 - 即使你加了
--no-cache参数,它也只跳过本地 ZIP 复用,仍会读repo/https---packagist.org/packages.json—— 这个文件若过期,update 就根本“看不见”新版本 - 如果你没删
composer.lock,Composer 就认定“当前状态已确定”,连远程索引都懒得重新拉
真正有效的“update 前缓存清理”组合操作
不是“过程中清”,而是“update 前必须清掉这四样”,缺一不可:
- 运行
composer clear-cache(清基础 ZIP 和 installers) - 手动删
$(composer config --global cache-dir)/repo/https---packagist.org/(Linux/macOS)或%APPDATA%\Composer\Cache\repo\https---packagist.org\(Windows)——这是元数据源头 - 删
vendor/composer/installed.json(当前安装快照,影响composer show和依赖图重建) - 删
composer.lock(硬锁定所有 dist.sha256 和 version,不删它,update 就是空转)
删完立刻跑 composer update --dry-run -v,紧盯日志里是否出现 Downloading https://packagist.org/packages.json。如果只看到 Reading /path/to/cache/packages.json,说明元数据没清干净,得重来。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
Windows 用户常踩的坑
PowerShell 里 $(composer config --global cache-dir) 返回值带换行或空格,直接拼路径会失败:
- 别写:
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/ - 要写:
$cache = (composer config --global cache-dir).Trim(); rm -rf "$cache/repo/https---packagist.org/" - 或者更稳妥:直接用
$env:APPDATA\Composer\Cache\repo\https---packagist.org\ - 删
composer.lock和installed.json时注意权限——某些 IDE(如 PHPStorm)可能正占用这些文件,导致rm -f静默失败
想自动化?用 post-update-cmd 不解决“更新滞后”问题
有人在 composer.json 里配 "post-update-cmd": ["composer clear-cache"],这纯属误导:
- 它在 update 完成后 才执行,对本次 update 完全无效
- 下次 update 时,依然面对的是上一次留下的旧
repo/和lock文件 - 真要自动化,该配的是 pre-update-cmd(Composer 2.2+ 支持),但目前主流项目仍靠手动组合清理
最易被忽略的永远是 composer.lock:它不在缓存目录里,不占磁盘空间,却像一道铁闸,死死卡住所有版本变动。删它之前,务必确认你清楚 composer.json 里的约束是否足够安全。










