composer show --all 列出指定包在 Packagist 上所有未被废弃的稳定及预发布版本,如 composer show monolog/monolog --all;不加 --all 仅显示本地 lock 文件中锁定的版本。

composer show -a 显示的是什么
composer show -a 并不是 Composer 官方支持的命令,运行它会直接报错:Command "show -a" is not defined.。Composer 的 show 命令不接受 -a(all)这个短选项——这是常见误解,可能源于把 npm list -g --depth=0 或 pip list --outdated 的习惯套用过来了。
想看某个包所有可用版本,该用哪个命令
正确方式是使用 composer show 加上包名和 -a 的**等效替代参数**:--all(注意是双横线)。这个参数会让 Composer 查询 Packagist 并列出该包**所有已发布、未被废弃的稳定/预发布版本**。
-
composer show monolog/monolog --all:列出 monolog 所有版本(含 1.x、2.x、3.x) - 不加
--all时,默认只显示当前 lock 文件中锁定的版本及其直接依赖 - 若包未在
composer.json中声明,--all仍能查到——它走的是远程 API,不依赖本地安装 - 响应较慢是正常现象,因需实时请求 packagist.org;可加
-vvv看底层 HTTP 请求
为什么有时 --all 没反应或报错
常见原因不是命令写错,而是环境或网络问题:
- 没配置 Packagist 镜像(如国内用户未设
https://packagist.phpcomposer.com或阿里云镜像),请求超时静默失败 - Composer 版本太老(--all 支持不稳定,建议升级到
composer self-update - 包名拼错或大小写不符(如
guzzlehttp/guzzle写成GuzzleHttp/Guzzle),返回空结果但不报错 - 遇到
[ErrorException] proc_open(): fork failed:通常是系统资源不足(如 Docker 容器内存太小),非命令本身问题
替代方案:不依赖网络查本地缓存版本
如果只想快速确认某包有哪些版本曾被安装过(比如调试历史兼容性),可以绕过网络:
-
ls vendor/包名(仅限已安装且未删 vendor 的情况) -
composer show --installed | grep 包名:只显示当前项目已安装的版本 - 更彻底的办法是直接查 Packagist API:
curl -s "https://packagist.org/packages/monolog/monolog.json" | jq '.package.versions | keys[]'(需装jq)
真正需要“所有可用版本”时,--all 是唯一官方路径,但得接受它本质是网络调用——不是本地索引查询,也不是版本范围解析器。










