根本原因是composer global update复用~/.composer/cache/repo/下旧包索引快照,不主动刷新远程元数据;需--no-cache强制直连镜像源或手动删除packagist.org缓存目录,并确认镜像配置正确生效。

composer global update 为什么总装旧版?
根本原因不是缓存没清,而是 composer global update 默认复用 ~/.composer/cache/repo/ 下的包索引快照——哪怕你刚 composer self-update 升级了 Composer,它仍会按旧 JSON 里的版本列表去拉取,不主动刷新远程元数据。
- 执行
composer global update --no-cache强制跳过 repo 缓存,直连镜像源拉最新 packages.json - 若仍装错版本,检查
~/.composer/cache/repo/packagist.org/是否存在残留的旧索引文件(如packages.json或provider-*.json),手动删掉整个packagist.org/目录更彻底 - 确认镜像配置生效:
composer config -g repo.packagist输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com..."},键名写成repos.packagist或漏掉"type": "composer"都会静默失效
全局工具缓存和普通项目缓存混在一起吗?
不混,但位置重叠。全局安装的包(如 laravel/installer、phpunit/phpunit)的 ZIP 包和解压后代码,都存在 ~/.composer/cache/files/ 和 ~/.composer/cache/repo/ 下,和普通项目依赖共用同一套缓存目录。所以清理全局工具旧版,本质就是清理这些子目录里“当前所有 composer.lock 都没引用”的包归档。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
~/.composer/cache/files/:按vendor-name-package-name-version.zip命名,直接按名字 + 版本号删 -
~/.composer/cache/repo/packagist.org/:存放 provider 映射和 packages.json 快照,删光后首次global update会慢几秒,但能确保看到最新版 -
~/.composer/cache/vcs/不影响全局工具——除非你global require过 vcs 类仓库(极少见),否则可忽略
怎么安全删掉已弃用的全局工具缓存?
没有一键命令,但可以靠 composer global list 和缓存路径交叉比对。重点不是“删哪些”,而是“别删错”:删掉正在用的包版本,下次 global update 会失败;删掉 repo 索引,只是首次变慢;删错 vcs 目录,可能影响私有 Git 工具。
- 先运行
composer global list --format=json,提取所有已安装包的name和version - 进
~/.composer/cache/files/,用find . -name "*laravel*installer*.zip" | grep -v "2.8.0"这类命令筛出非当前版本的 ZIP,再-delete - 不要碰
~/.composer/cache/repo/packagist.org/packages.json—— 它是通用索引,删了所有包都得重拉;只删provider-*.json这类按包名分片的文件 - 删前确保没有
composer global update进程在后台跑,否则可能触发Corrupted cache file
Windows 上删缓存容易卡住?
是的,尤其当杀毒软件或 PHPStorm 正在扫描 %APPDATA%\Composer\Cache\files\ 下的 ZIP 文件时,rd /s /q 会因文件被占用而失败,且不报错——看起来删完了,其实空目录还在。
- 用 PowerShell 替代 CMD:
Remove-Item "$env:APPDATA\Composer\Cache\files" -Recurse -Force,-Force能绕过部分锁定 - 临时关闭 Windows Defender 实时保护,或把
%APPDATA%\Composer\Cache加进排除列表 - 删完立刻验证:
dir "$env:APPDATA\Composer\Cache\files"应返回File Not Found,而不是空列表 - 如果仍失败,用
handle.exe -a -p php.exe(Sysinternals 工具)查哪个进程锁着缓存文件
global list 里、但被某个废弃脚本硬编码 require 的包——它们的缓存不会自动标记为“旧”,只能靠人工翻 composer.lock 或历史 commit 记录定位。










