composer 无原生命令列出缓存包名,需手动解析 ~/.composer/cache/files 目录结构提取 vendor/name,或用 composer archive 命令间接验证缓存是否存在。

composer show --platform 显示的是 PHP 环境信息,不是缓存包
很多人误以为 composer show 或 composer list 能直接列出本地缓存的包名,其实不能。Composer 缓存(~/.composer/cache)是按 vendor 名 + 版本哈希组织的,不暴露包名索引,命令行无原生命令“列出所有已缓存包名”。
用 composer global show -N 查不到缓存,但能查全局已安装包
composer global show -N 只显示全局 require 的包(即 ~/.composer/vendor 下已安装的),和缓存无关。缓存目录里的包可能从未被安装过,只是下载后暂存——比如执行 composer install 时命中缓存跳过下载,但包仍没解压进项目 vendor/。
手动解析 ~/.composer/cache/files/ 目录结构获取包名
Composer 缓存包实际存放在 ~/.composer/cache/files/(Linux/macOS)或 %APPDATA%\Composer\Cache\files\(Windows),每层目录对应 vendor/name 的小写+短横格式,例如:monolog/monolog → monolog/monolog/ 子目录下是各版本的 zip/tar 哈希文件夹。
可行做法是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进入缓存 files 目录:
cd ~/.composer/cache/files - 执行命令提取 vendor/name:
find . -mindepth 2 -maxdepth 2 -type d -printf '%h/%f\n' | cut -d'/' -f3-4 | sort -u - Windows 用户可用 PowerShell:
Get-ChildItem -Directory | ForEach-Object { $_.Name.Split('-')[0,1] -join '/' }(需进一步去重和过滤) - 注意:部分缓存条目可能是
dist或archived类型,但只要目录存在且非空,基本对应一个有效包
更可靠的方式:用 composer archive 模拟触发缓存命中并观察输出
虽然不能直接“列出”,但可以间接验证某个包是否在缓存中:composer archive monolog/monolog 2.0.0 --format=zip --dir=/tmp。如果看到 Using cached archive 提示,说明该包版本已在缓存;若提示 Downloading...,则不在。
批量检查建议写个小脚本:
for pkg in "monolog/monolog" "symfony/console"; do echo -n "$pkg: " composer archive $pkg 1.0.0 --format=zip --no-interaction 2>&1 | grep -q "cached" && echo "cached" || echo "not found" done
这个方法不依赖路径解析,兼容所有 Composer 版本,也避开 Windows 路径分隔符问题。
真正要导出完整缓存包名列表,还是得解析 files/ 目录——因为缓存本身没有元数据索引,这是 Composer 的设计取舍,不是操作遗漏。










