composer版本号以composer --version输出的语义化版本(如2.7.7)为准,括号内时间为官方phar构建utc时间;查远程所有可用版本须用composer show -a vendor/package,而非-all。

查当前 Composer 版本:用 composer --version,但别信时间戳是“你装的时间”
执行 composer --version 输出类似 Composer version 2.7.7 (2024-06-12 13:45:00),其中 2.7.7 是真实语义化版本号,而括号里那个时间不是你本地安装或升级的时间,是官方 PHAR 包构建时的 UTC 时间戳。如果你自己从源码 git clone && php install.php 构建,会看到 dev-main 这类标识,且无精确时间——这说明你用的不是标准发布版。
- 想确认是否为官方稳定包?看有没有带完整日期的时间戳;有,大概率是官网下载的 PHAR
- 在 CI/CD 或容器里看到
dev-main,别慌,只是构建方式不同,功能一致,但自动更新、签名验证等行为可能受限 - 某些老旧系统(如 CentOS 7 默认 PHP 5.4)跑新版 Composer 会报错,此时
--version可能根本执行不了——先用php -v看 PHP 版本是否达标(Composer 2.x 要求 PHP ≥7.2)
查某个包的所有可用版本:必须用 composer show -a vendor/package-name
composer show -a 是唯一能可靠拉取 Packagist 全量远程版本列表的命令,包括 3.5.0、2.10.0、dev-main、1.2.3-RC1 等所有 tagged release 和分支快照。它不依赖本地是否已安装该包,也不看你 composer.json 里有没有写它。
- 拼错包名?会直接报
Package not found,不是命令失效,而是 Packagist 上真没这个命名空间 - 私有包查不到?检查
composer.json是否配置了正确的repositories,且 token 有效;镜像源(如阿里云)可能延迟数小时,临时切回官方源:composer config -g repo.packagist composer https://packagist.org - 输出太长想只看版本号?加
--format=json配合jq最干净:composer show -a monolog/monolog --format=json | jq -r '.versions | join("\n")';没jq就用grep "versions" -A 1+cut粗筛,但注意字段顺序可能随 Composer 版本微调
查已安装包的当前版本:直接 composer show vendor/package-name,不加 -a
这个命令只读 vendor/ 和 composer.lock,不联网,所以快、稳、反映真实运行态。但它只显示「当前项目实际用了哪个版本」,不会告诉你还有哪些新版本可选。
- 想确认某包是不是被间接升级过?对比
composer show foo/bar和git diff composer.lock中对应区块 - 发现版本和预期不符?可能是
minimum-stability设置影响了安装结果(比如设成stable就不会装dev-main),或者有conflict规则压制了高版本 - 只想看项目里所有直接依赖的版本?用
composer show --direct,比扫完整依赖树更聚焦
为什么 composer show -all 单独执行没用?它根本不查远程
composer show -all(注意是 -all 不是 -a)是个容易误解的命令:它不接受包名参数,也不访问 Packagist API,只是把当前 vendor/ 下每个已安装包的缓存版本全列出来——比如你曾用 composer update --with-all-dependencies 拉过旧版,它就可能出现在这里,哪怕那版早已下线。
- 它列出的版本 ≠ 当前可安装版本,更 ≠ Packagist 上最新版
- 你只装过
v2.9.0,即使v2.10.0已发布三天,show -all也不会显示它 - 真正需要做版本调研时,别贪快跳过
-a参数;网络慢或失败时,直接打开https://packagist.org/packages/vendor/package-name更直观
最常被忽略的一点:版本列表是否完整,取决于你当前配置的仓库源和网络可达性。本地能跑通 composer show -a,不代表 CI 环境也能——尤其当使用私有 GitLab 仓库又没配好 SSH key 或 token 时,错误往往静默表现为“查不到任何版本”,而不是明确报错。










