composer show 命令仅显示 composer.lock 中直接声明的依赖包,不递归子依赖;加 –tree 才展示完整安装树;需在项目根目录执行且依赖 composer.lock 文件存在。
直接列出所有已安装包:用 composer show 就够了
在项目根目录(有 composer.json 和 composer.lock 的地方)运行 composer show,就能立刻看到当前 vendor 下所有**直接声明的依赖包**及其版本、描述——不联网、不扫描文件,只读 composer.lock,快且可靠。
- 默认只显示
require和require-dev中你手动写的包,不展开它们的子依赖 - 如果
composer.lock不存在(比如刚初始化但没 run 过composer install),命令会返回空或报错,这时composer show没意义,得先装依赖 - 别在错的目录执行:常见问题是终端当前路径不是项目根目录,结果提示
Command "show" is not defined或输出为空——先ls composer.json确认位置
想看完整依赖树?必须加 --tree
composer show 不加参数 ≠ 查看全部已安装包。它不递归;而 composer show --tree 才真正反映 vendor 目录里实际存在的所有包及其嵌套关系。
- 输出是缩进结构,例如
monolog/monolog下面跟着psr/log,再下一层可能是psr/cache(如果被引用) - 同一包被多个父包依赖时,只显示第一次出现的路径,不会重复展开——这既是简化也是陷阱,容易误判“某个包没被装”
- 输出太长?直接管道过滤:
composer show --tree | grep "guzzlehttp"或用less分页查看 - 注意:若某包因版本冲突被丢弃(没进最终解析结果),
--tree也不会显示它——它展示的是 Composer 实际安装的那一棵“活树”,不是所有可能路径
查某个包的详情或是否装了:composer show vendor/package
这是排查类加载失败、版本不一致、autoload 配置问题的第一步。指定包名后,composer show 会输出它的安装路径、源类型(git/dist)、require 列表、autoload 规则等。