composer clear-cache 不删 composer.lock 关联旧包,因它只清 ~/.composer/cache/ 下 files/、repo/、vcs/,完全不解析 composer.lock;精准清理需手动比对 lock 中包版本与 cache/files/ 内 ZIP 文件,仅删除未被引用的 ZIP,并同步清理 installed.json 和镜像 repo 索引。

composer clear-cache 为什么删不掉 lock 文件关联的旧包?
因为 composer clear-cache 只清 ~/.composer/cache/(Linux/macOS)或 %APPDATA%\Composer\Cache(Windows)下的 files/、repo/、vcs/,它**完全不读取也不解析 composer.lock**。lock 文件里记录的是“我当前用哪个版本”,但缓存目录里可能还躺着几十个没被引用的旧 ZIP 和元数据——这些不会被自动识别为“冗余”。
怎么精准定位并删除 lock 文件里没用的包缓存?
必须手动比对:先提取 lock 中所有正在用的包名+版本,再进缓存目录删掉其余 ZIP。关键步骤如下:
- 运行
composer config --global cache-dir确认真实缓存路径 - 用
jq -r '.packages[] | "\(.name)-\(.version)"' composer.lock(Linux/macOS)或 PowerShell 的(Get-Content composer.lock | ConvertFrom-Json).packages.name提取全部已声明版本 - 进入
$(composer config --global cache-dir)/files/,按命名规则匹配(如monolog-monolog-1.20.0.zip),只删不在 lock 列表里的 ZIP - 别碰
repo/下的packagist.org/目录——删了会导致首次composer update卡住拉元数据
删完缓存后 install 还是装旧版?检查这三个地方
常见误判是“清了缓存却没更新”,其实问题不在缓存,而在本地状态残留:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer.lock没改:它硬编码了 dist URL 和sha256,只要它没变,composer install就一定复用旧包,哪怕缓存全空 -
vendor/composer/installed.json没刷新:这个文件记录当前已装包的真实版本,若它和 lock 不一致,composer show会显示错乱结果 - 镜像源元数据过期:
~/.composer/cache/repo/https---mirrors.aliyun.com/(或你配置的镜像)下 provider 文件可能仍指向旧索引,需配合rm -rf清该目录
vcs/ 目录才是真·空间黑洞,但 clear-cache 默认跳过
一个 Laravel 包的 Git 裸仓库(vcs/ 下)常占 300–800 MB,且含数万小文件——这直接耗尽 inodes。而 composer clear-cache 默认不清理它,除非你加 --no-interaction 并手动补删:
- Linux/macOS:
rm -rf $(composer config --global cache-dir)/vcs/* - Windows:
rd /s /q "%APPDATA%\Composer\Cache\vcs" - 长期方案:禁用 VCS 缓存,
composer config --global cache-vcs false,后续全走--prefer-dist
真正难的不是“怎么删”,而是删之前得确认哪些 ZIP 是 lock 里明确定义的、哪些是历史残留;删之后还得同步清理 installed.json 和镜像 repo 索引,否则行为依旧不可控。

















