不能,composer show 仅显示已安装包;查本地缓存需用 composer search --no-cache(仅列包名)、手动解析 ~/.composer/cache/repo/ 下 provider json 文件,或用 composer why-not 试探可用版本。

composer show 命令能查本地缓存里的包版本吗
不能直接查。composer show 默认只查已安装的包(即 vendor/ 里存在的),对仅存在于 Composer 全局缓存(~/.composer/cache/)但尚未 require 的包完全不可见。它不扫描缓存目录,也不读取缓存索引。
用 composer search + --no-cache 绕过远程请求查本地缓存
真正能利用本地缓存的是 composer search,但默认会连 Packagist 发起网络请求。加 --no-cache 参数后,Composer 会跳过远程 API,转而尝试从本地缓存中匹配包名——前提是该包此前被搜索、require 或 update 过,其元数据已存入缓存。
-
composer search monolog --no-cache:列出所有缓存中含 “monolog” 的包名(不一定精确匹配) - 结果不带版本号,只返回包名列表;想看具体版本,得配合下一步
- 注意:如果包从未被交互过,即使缓存目录里有 .zip 文件,也不会出现在
search --no-cache结果里——因为元数据(.json)没入库
手动检查 ~/.composer/cache/repo/ 目录结构获取真实版本信息
Composer 缓存的包元数据实际存在 ~/.composer/cache/repo/ 下,按仓库分目录(如 https---packagist.org/),里面是压缩的 packages.json 和按 vendor/name 分片的 provider-*.json。要查某个包的所有可用版本,最可靠的方式是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进入对应 provider 文件,例如:
cat ~/.composer/cache/repo/https---packagist.org/provider-monolog-monolog.json | jq -r '.packages."monolog/monolog"[] | .version' - 需要安装
jq工具解析 JSON;没有jq就得靠grep+sed提取"version"字段,容易漏掉嵌套结构 - provider 文件可能被 gzip 压缩(扩展名是
.json.gz),得先用zcat或gunzip -c解压再处理 - 不同 Composer 版本缓存结构略有差异:2.x 把 provider 拆得更细,3.x 引入了新的 lazy-provider 格式,直接读文件不如用内部命令稳妥
用 composer why-not 配合虚拟版本试探缓存是否存在
这不是正向查询,但很实用:如果你知道某个包的大致版本范围(比如 ^2.0),可以用 composer why-not 在空项目里“假装”要装它,触发 Composer 加载缓存元数据并报错——错误信息里会明确列出该包在缓存中实际存在的版本。
- 新建空目录,运行:
composer init --no-interaction && composer require monolog/monolog:999.999.999 - 报错类似:
monolog/monolog 999.999.999 -> no matching package found. Available versions: 1.0.0, 1.1.0, ..., 3.5.0 - 这个 “Available versions” 列表就是当前缓存里已有的全部版本,不含网络实时查询结果
- 缺点:只能针对单个包,且要求缓存里至少有一个版本;对未接触过的包无效
缓存不是数据库,没有内置的 “list all versions” 接口。所有方法都依赖历史行为留下的元数据痕迹,一旦缓存被清空或从未触发过相关操作,就真的一无所知。










