不能直接列出——composer show -all 不接受包名参数,仅显示已安装包的本地缓存版本;查某包所有远程可用版本应使用 composer show -a vendor/package-name,它通过 Packagist API 获取全部稳定及预发布版本。

composer show -all 能不能列出某个包的所有版本
不能直接列出——composer show -all 本身不接受包名参数,它只显示当前项目已安装包的详细信息(含所有已下载的版本缓存),但不会拉取远程仓库的全部可用版本。想查某包在 Packagist 上所有可安装版本,得换命令。
正确查某个包所有可用版本的命令
用 composer show 加包名,再配合 -a(即 --all)标志,才能获取远程元数据中的全部版本列表:
composer show -a vendor/package-name
例如查 monolog/monolog 的所有版本:
composer show -a monolog/monolog
- 必须已配置好 Packagist 源(默认就是),且网络可达;否则会报
Could not load package xxx - 输出包含
versions行,后面跟着从旧到新排列的全部稳定 + 预发布版本(如3.0.x-dev,2.10.0,1.27.4) - 如果包名拼错或私有仓库未配置,会提示
Package not found,不是命令无效
为什么 composer show -all 单独执行没用
单独运行 composer show -all(不带包名)的行为是:遍历 vendor/ 下每个已安装包,显示其 name、version、source 等信息,并把每个包自己缓存过的多个版本(比如通过 composer update --with-all-dependencies 曾拉过的旧版)也列出来——但这只是本地 composer.lock 和 vendor/ 的快照,和远程真实可用版本无关。
- 它不触发 Packagist API 请求,所以看不到尚未安装过的版本
- 如果你只装过
v2.9.0,即使v2.10.0已发布,composer show -all也不会显示它 - 这个命令适合审计当前项目实际依赖了哪些版本,不适合做版本调研
替代方案与注意事项
若 composer show -a 响应慢或失败,可直接访问 Packagist 页面:https://packagist.org/packages/vendor/package-name,右侧 “Versions” 栏更直观;也可用 API:
curl -s "https://packagist.org/packages/vendor/package-name.json" | jq '.package.versions | keys'
-
jq需提前安装,否则去掉管道部分看原始 JSON - 私有包需配置
composer config repositories.并确保 token 有效,否则show -a查不到 - 某些镜像源(如阿里云)可能同步延迟数小时,看到的版本比 Packagist 少,此时换回官方源:
composer config -g repo.packagist composer https://packagist.org
真正要确认某个版本能否装上,最终还得靠 composer require vendor/package:version 或 composer update vendor/package —— 显示的“可用”不等于本地环境能成功解析依赖树。










