composer show -a 是唯一能查到 packagist 上全部可用版本的命令,它不依赖本地安装状态和 minimum-stability 限制,但不返回已被删除、abandoned 或未同步的 tag。

直接用 composer show -a vendor/package-name,这是唯一能查到 Packagist 上全部可用版本的命令。 它不依赖本地是否安装过,也不受 minimum-stability 限制,但不会返回已被删除、标记为 abandoned 或未同步到 Packagist 的 tag。
为什么 composer show 不加 -a 看不到历史版本
默认行为只显示三类信息:当前已安装版本、Packagist 标记的 latest(最新稳定版)、以及按 minimum-stability 过滤后的 latest-stable。它读的是本地缓存,不是远程全量数据 —— 即使你装过 v1.2.0,只要没被缓存或后来清过 cache,它也不会出现在输出里。
- 不联网,不请求 Packagist API
- 未安装的包会直接报错
Package not found - 输出里的
versions字段只是“曾经见过的几个版本”,不是历史列表
composer show -a 的实际表现和常见陷阱
执行 composer show -a monolog/monolog 后,你会看到从 1.0.0 到 3.x 的所有 tagged 版本,包括 2.10.0-beta1、dev-main、3.4.0-RC1 等。但它不标注发布时间、不说明是否废弃、也不区分轻量 tag 和附注 tag。
- 包名拼错(如
monolg/monolog)→ 报Package not found,不是网络问题 - 国内镜像源(如阿里云)可能滞后数小时 → 新发布的
v4.0.0查不到,临时切回官方源:composer config -g repo.packagist composer https://packagist.org - 首次执行较慢 → 因要拉取远程元数据,加
-v可看请求过程 - 缓存导致刚发布版本不可见 → 加
--no-cache强制刷新:composer show -a --no-cache monolog/monolog
查不到的版本去哪找?别只盯 CLI
如果 composer show -a 和 Packagist 网页版都缺失某个版本,大概率是上游已移除:tag 被删、包被标记为 abandoned、或用了非标准命名(如 release-1.2.3)。这时得绕过 Composer,直连源头。
- 先用
composer show monolog/monolog -s拿到真实source.url - 再执行
git ls-remote --tags https://github.com/Seldaek/monolog.git,看到的是 Git 仓库原始 tag 列表 - 注意区分
1.2.3(轻量 tag,Composer 可识别)和1.2.3^{}(附注 tag,通常不可用) - Packagist 网页版的 “Versions” 标签页比 CLI 更全,会标出
abandoned和legacy状态
真正容易被忽略的是:Packagist 不是归档系统,它只索引满足条件的 tag —— 语义化格式、存在有效 composer.json、未被手动隐藏。你看到的“历史版本列表”,本质是“Composer 当前能 require 的候选集”,不是 Git 全量快照。











