composer show . 显示当前项目自身元信息,包括 name、description、autoload 等字段,读取 composer.json;不加参数的 composer show 仅列出已安装包及其实际版本,不显示 root package 的 autoload 或版本约束。

composer show 不加参数就显示当前项目信息
直接运行 composer show,它默认读取 vendor/composer/installed.json,输出的是当前项目中所有已安装包的快照——包括 require 和 require-dev 里声明的包,以及它们实际安装的版本、描述。它不显示你写的版本约束(比如 "^3.0"),只显示最终装上的那个版本(比如 3.5.0)。
这个命令本身没有 --root-package 这个选项;Composer 官方文档和 2.9.6 版本源码中均无此参数。常见误传往往源于把 --root-reqs 或 composer info 的行为混淆了。
- 想看当前项目自身(即 root package)的元信息,比如 name、description、type、autoload —— 应该用
composer show .(注意那个点) -
composer show .会输出类似myapp/myproject 1.0.0的结果,并附带其composer.json中定义的字段,包括 scripts、autoload、require 等 - 如果项目还没执行过
composer install,vendor/为空,composer show会报错Could not find package;但composer show .仍可工作,因为它读的是当前目录的composer.json
composer show . 查看当前项目的完整配置
composer show . 是唯一能直接暴露 root project 元数据的 show 用法。它不是查“装了什么”,而是查“我是谁、我依赖谁、我怎么加载”。
- 输出包含
autoload和autoload-dev映射,这对调试类找不到(Class not found)问题非常关键 - 会列出
require和require-dev下所有包名+版本约束(不是已安装版本),可用于核对 composer.json 是否被意外修改 - 若项目 type 是
project,说明它是可独立运行的应用;若是library,则通常会被其他项目 require,autoload 配置更受关注 - 不加任何参数的
composer show永远不会显示 root package 的 autoload 字段,这点极易忽略
为什么别信 --root-package,也别硬凑参数
在 Composer 2.9.6 中,composer show --help 输出里没有 --root-package;尝试执行会报错 Unrecognized option: --root-package。类似拼写错误还有 --root-pkg、--main-package,全都不合法。
- 真正可用的精简选项是
--root-reqs:只列composer.json中require/require-dev声明的包名及其已安装版本,不递归,不展示约束 -
--root-reqs和--tree互斥,加了后者前者就失效 - 想导出结构化数据用于脚本比对,优先用
composer show --root-reqs --format=json,而不是试图解析表格输出 - CI 场景下若用了
--no-dev,--root-reqs输出也会过滤掉 dev 依赖,需确认是否符合预期
排查“当前项目信息没显示”时先看这三件事
执行 composer show . 却看不到预期字段?不是命令错了,大概率是环境或配置卡点。
- 确认在项目根目录:必须存在
composer.json,且当前路径下运行命令(ls composer.json要有回显) - 检查
composer.json是否语法错误:运行composer diagnose,它会提示 JSON 解析失败或 missing name 字段等问题 - name 字段为空或非法(如含空格、大写字母、下划线)会导致
composer show .输出异常或截断;Composer 要求 name 格式为vendor/name,例如myorg/myapp - 如果项目用了
replace或provide,composer show .仍显示原始 name,但实际行为可能被覆盖——这时得结合composer show --tree看谁真正被加载


















