直接运行 composer --version 即可查看当前生效的 Composer 版本号(如 2.7.7),括号内时间为官方 PHAR 构建 UTC 时间戳,非本地安装时间;composer -v 是 verbose 模式开关,单独执行等价于 composer list,不显示版本,查版本必须用 --version。

直接运行 composer --version 就能看到当前生效的 Composer 版本号,比如 Composer version 2.7.7;它不依赖项目目录、不读 composer.json,但输出的括号内时间是官方构建 UTC 时间戳,不是你本地安装时间。
为什么 composer -v 不显示版本?
composer -v 是「开启详细日志」的开关,不是查版本命令——单独执行时等价于 composer list,只输出帮助信息。真正查版本必须用 --version(或小众兼容的 -V,但推荐统一用 --version)。
- 输成
composer -v install?这会以 verbose 模式执行 install,不是查版本 - CI 脚本里硬写
composer -v判断版本?大概率误判,应改为composer --version - 某些旧版 Composer 不支持
-V,--version兼容性最稳
composer --version 查的是哪个 Composer?
它查的是当前 shell 找到的第一个 composer 可执行文件,不一定是项目实际用的那个。尤其当你同时有全局安装和项目级 vendor/bin/composer 时,容易误判。
- 先运行
which composer(macOS/Linux)或where composer(Windows)确认路径 - 项目根目录下存在
composer.phar?优先用php composer.phar --version查它 - Laravel/Symfony 项目里别信
php artisan --version,它不反映 Composer 版本
查到了版本号,但 CI 和本地行为不一致?
常见原因是 v1 和 v2 混用:composer --version 输出 2.x 表示 v2(当前主流),1.x 表示已停止维护的 v1(2022 年 12 月起不再更新)。两者在锁文件格式、依赖解析逻辑、插件加载上差异显著。
- v2 默认生成
composer.lockversion 2,v1 无法识别 - 某些老 CI 脚本写死
composer install --no-plugins,v2 下该参数可能被忽略 - 看到
dev-main或带+git后缀?说明不是官网 PHAR,而是源码构建版,self-update可能不生效
真正难的不是查版本,而是确认 composer.lock 顶部的 content-hash 和当前环境的 platform-check 是否匹配——不同版本反复重写 lock 文件后,这个细节最容易被跳过。











