composer show -a 可查包的全部可用版本(含预发布),但需手动用 grep 过滤 stable 版本;网页版与 cli 结果差异源于缓存、废弃标记及稳定性配置。

composer show 查不到包的全部历史版本?
默认 composer show 只显示当前已安装版本或最新稳定版,不列出所有可用版本。想看某包从 v1.0.0 到 v3.2.1 的完整发布记录,得换命令。
用 composer show -a 查所有可用版本(含预发布)
composer show -a 是最直接的方式,它会向 Packagist API 发起请求,拉取该包在所有稳定性标签(stable、beta、alpha、dev)下的全部 tagged 版本。注意:不是所有版本都保证能装,尤其 dev- 前缀的分支名不算正式版本。
- 执行
composer show -a vendor/package-name(比如composer show -a monolog/monolog) - 输出里每行是一个
version字段值,如2.9.0、3.0.0-RC1、dev-main - 如果报错
Package not found,说明包名拼错,或该包未在 Packagist 公开注册 - 国内用户可能遇到超时,可临时加
-vvv看请求细节,或配镜像源(如阿里云https://mirrors.aliyun.com/composer/)
想过滤只看 stable 版本?手动 grep 更可靠
composer show -a 输出混着 alpha/beta/dev,但很多项目只要求 stable。没有内置参数过滤,得靠 shell 工具筛:
composer show -a monolog/monolog | grep -E '^[0-9]+.[0-9]+.[0-9]+$'
这个正则能匹配形如 2.10.0、1.27.1 的语义化 stable 版本号,跳过 3.0.0-beta1 或 dev-master。注意:有些包用 v2.0.0 格式打 tag,就得改成 ^v[0-9]+.。
为什么 packagist.org 网页版和 CLI 结果有时不一致?
网页上看到的“Latest version”是 Packagist 缓存+算法计算的结果(比如优先推 stable 且非废弃的),而 composer show -a 是实时查 API 的 raw tags 列表。常见差异点:
- 包作者删了某个 tag,Packagist 需要几小时同步,CLI 可能还列着,网页已隐藏
- 某些版本被标记为
abandoned(如phpunit/phpunit:4.8),网页会显灰,但show -a仍返回 - 本地有
composer.json锁定了"minimum-stability": "dev",show -a就会多出一堆dev-分支
真正要确认某个版本能否装,别光看列表,直接试 composer require vendor/package:2.5.0 —— Composer 会自己校验依赖兼容性和版本有效性。