composer --version 只能查 composer 自身版本号和构建时间,不能查 php 版本、联网状态或 vendor/ 完整性;常见失败原因是 path 未配置或 composer.phar 未正确安装。

composer --version 能查什么、不能查什么
composer --version 输出的是 Composer 自身的版本号和构建时间,比如 Composer version 2.7.7 (2024-06-12 13:45:00)。它不反映 PHP 版本、不检查是否能联网、也不验证 vendor/ 是否完整——它只告诉你手头这个 composer 可执行文件是哪个版本、啥时候打包的。
常见错误现象:
- Windows 用户双击安装完却提示 'composer' is not recognized as an internal or external command,其实是 PATH 没配好,不是版本问题;
- 手动用 php composer-setup.php 安装后忘了重命名或加执行权限,--version 会直接报错而非显示版本。
- 执行前先确认
which composer(macOS/Linux)或where composer(Windows)有输出路径 - 若无输出,说明命令根本没进系统环境变量,此时
--version必然失败 - 手动安装的
composer.phar,需额外做软链或改名(如 Windows 下建composer.bat)才能当命令用
composer show 查当前项目装了哪些包和版本
composer show 是查「已安装依赖」的正确命令,它读的是 vendor/ 目录 + composer.lock,不是 composer.json 里写的“想装什么”,而是“实际装了什么”。
使用场景:上线前核对版本、排查本地与测试环境差异、快速确认某个包是否真被装进来了。
- 不加参数:
composer show列出所有已安装包,按字母排序,格式为vendor/name → version - 查单个包:
composer show monolog/monolog显示其当前安装版本、描述、依赖、源码地址等 - 只取版本号(适合脚本):
composer show monolog/monolog --format=json | php -r "echo json_decode(file_get_contents('php://stdin'))->version;" - 容易踩的坑:如果项目还没运行过
composer install,composer show会返回空,不是命令错了,是vendor/根本不存在
composer show --all vendor/package-name 查远程所有可用版本
composer show --all 加上包名,才是真正查“这个包在 Packagist 上发布过哪些版本”的方法。它走的是 API,不是本地缓存,所以能看到 dev-main、2.10.0-beta1、1.27.0 等全部标签。
注意:composer show -all(不带包名)是另一个命令——它只列出你本地 vendor/ 里曾经下过的多个版本(比如之前 update 过旧版),跟远程真实版本无关。
- 正确写法:
composer show --all monolog/monolog,不是--all单独用 - 如果提示
Package not found,先检查包名拼写,再确认是否用了私有仓库但没配置源 - 国内用户若发现版本比 Packagist 少,可能是镜像同步延迟,临时切回官方源:
composer config -g repo.packagist composer https://packagist.org - 想过滤出纯版本号列表?用
composer show --all monolog/monolog | grep '^\s*[0-9]\|dev\|alpha\|beta'(注意缩进和开头字符)
composer show --tree 查依赖树的前提和限制
composer show --tree 能画出某个包被谁依赖、又依赖了谁的结构,但它有硬性门槛:只在 Composer ≥ 2.2.0 中可用,且必须项目已安装依赖(即 vendor/ 存在)。
常见错误现象:
- 执行后没输出、也不报错 → 很可能 Composer 版本太低;
- 提示 Unrecognized option: --tree → 确实低于 2.2.0;
- 返回空 → 已升级但还没跑过 composer install。
- 先运行
composer --version确认 ≥ 2.2.0,否则先composer self-update - 指定包名更实用:
composer show --tree monolog/monolog,只显示它的正向依赖路径 - 别混用
--tree和--platform或--installed,参数冲突会导致静默失败 - 需要反向查“谁依赖了这个包”?该用
composer depends vendor/package-name,不是--tree
真正容易被忽略的点是:所有 show 类命令都依赖 vendor/ 和 composer.lock 的状态。没装过依赖、删了 vendor/、或者 lock 文件损坏,这些命令要么空转、要么报错——它们不是魔法,只是读文件的工具。









