composer show –all 查不到包版本,通常因包名错误或未配置对应仓库源;私有包需确认 repositories 配置并刷新元数据;缓存过期会导致版本显示不全,应执行 composer clear-cache 或加 –no-cache 参数。

composer show –all 查不到包的可用版本?先确认包名拼写和仓库源
直接执行 composer show --all vendor/package-name 报错或返回空,大概率不是命令问题,而是包名写错了,或者当前项目没配置对应仓库源。Composer 默认只查 packagist.org 上公开的包;如果你用的是私有 git 仓库、Satis 或 Artifactory,得先确保 composer.json 里已声明该源,并且运行过 composer update --no-scripts 刷新了元数据缓存。
- 包名必须是
vendor/name格式(比如monolog/monolog),不能写成 github 路径或本地路径 - 私有包要检查
repositories配置是否生效,可临时加-vvv看 Composer 是否尝试连接了对应源 - 如果包存在但没 tag,
--all也只会显示dev-main或dev-master这类开发分支,不是“没版本”,而是没打正式 release
为什么 composer show --all 显示的版本比 packagist 页面少?
Composer 缓存了远程包的元数据,本地缓存过期或不完整时,--all 就不会拉到最新 tag。它不像网页端实时请求,而是读取 ~/.composer/cache/repo/https---packagist.org/packages.json 及其压缩包索引。
- 强制刷新缓存:运行
composer clear-cache再试composer show --all - 跳过缓存直连源:加
--no-cache参数,例如composer show --all monolog/monolog --no-cache - 某些旧版本 Composer(–all 支持不全,建议升级到
2.x或至少1.10.22+
替代方案:用 composer search + composer show 组合定位版本
当不确定包名,或想批量查多个相似包时,composer search 比盲猜更可靠;它不依赖本地锁文件,能快速列出匹配的 vendor/name。
- 模糊搜索:如
composer search log找日志相关包 - 确认包名后,再执行
composer show --all vendor/package - 若只想看稳定版(排除
dev-和alpha/beta/rc),加--format=json后用jq过滤:composer show --all monolog/monolog --format=json | jq -r '.versions | keys[] | select(test("^d+.d+.d+$"))'
注意:composer show --all 不受 minimum-stability 限制,但受 platform 配置影响
即使你设了 "minimum-stability": "stable",--all 仍会列出所有版本(包括 dev-main)。但反过来说,如果 composer.json 里写了 "platform": {"php": "8.1"},而某个包的 composer.json 声明了 "php": "^8.2",那这个版本就不会出现在 --all 结果里——Composer 会在本地做一次兼容性预筛。
- 检查当前 platform 设置:
composer config platform - 临时绕过 platform 限制查看全部版本:
composer show --all vendor/package --no-plugins --no-scripts - 真正安装时,Composer 还会校验
require中其他包的约束,所以这里看到的“可用”≠“能装”,只是元数据层面可见
事情说清了就结束。最常被忽略的是 platform 配置和缓存状态——这两点不排查,光换命令也没用。