最直接查看包全部可用版本的方式是 composer show -a 包名,它列出 Packagist 上所有已发布且未被废弃的版本(含 stable、RC、beta、dev 分支等),但依赖本地仓库配置,不显示已删除或标记为 abandoned 的版本。

composer show -a 查看包的全部可用版本
最直接的方式是用 composer show -a 加包名,它会列出该包在 Packagist 上所有已发布、且未被标记为“abandoned”的版本(包括 stable、RC、beta、dev 分支等)。比如想查 monolog/monolog 的历史版本:
composer show -a monolog/monolog
注意:这个命令依赖本地 composer.json 中配置的仓库源(默认是 packagist.org),如果包只在私有仓库中,需确保 repositories 已正确配置。另外,它不会显示已被删除或软删除(如 marked as abandoned)的版本。
composer show 不加 -a 只显示当前安装版本和 latest
composer show 默认行为容易让人误以为“没历史版本”,其实它只展示三类信息:当前项目中安装的版本、latest(最新稳定版)、latest-stable(按 stability 标签过滤后的最新稳定版)。比如:
composer show monolog/monolog
输出里可能只有 2.10.0(当前装的)、3.5.0(latest)、2.10.0(latest-stable),完全不体现 1.x 或 2.8.0 这些旧版 —— 这不是 bug,是设计如此。
用 composer search + packagist.org 手动查更全的发布记录
当 composer show -a 返回为空或版本明显不全时,说明包可能:
- 未在 packagist.org 注册(比如只在私有 Git 仓库中)
- 被作者手动隐藏或未同步 tag
- 使用了非标准版本格式(如
v1.2.3而非1.2.3)
这时建议直接访问 https://packagist.org/packages/{vendor}/{package} 页面,比如 https://packagist.org/packages/monolog/monolog,点开 “Versions” 标签页,能看到带时间戳的完整 release 列表,包括每个版本对应的 Git commit、是否 stable、是否 legacy。页面数据比 CLI 更权威、更新更及时。
通过 Git 仓库直接查 tag(适用于私有包或深度排查)
如果包源是 Git(如 GitHub/GitLab),且你有访问权限,可以直接克隆或查看其 tags:
git ls-remote --tags https://github.com/Seldaek/monolog.git
这能绕过 Composer 缓存和 Packagist 同步延迟,看到原始发布的 tag 名。注意区分轻量 tag(1.2.3)和附注 tag(1.2.3^{}),Composer 通常只认前者;若看到大量重复 tag(如 1.2.3 和 1.2.3^{} ),说明作者用了附注 tag,但未推送到远端 —— 这种情况 composer show -a 就看不到对应版本。
版本号解析逻辑藏在 Composer 的 VersionParser 类里,对格式极其敏感:开头带 v、多余空格、混合大小写,都可能导致某个 tag 被忽略。真要定位“为什么某个版本死活不出现”,得去翻 composer.lock 里的 source 字段,再比对 Git tag 输出。










