composer show 默认只显示顶层依赖,非全部已安装包;需加 --tree 查完整依赖树、--installed 导出已安装列表,因其仅解析 composer.lock 中的顶级 packages 字段,跳过间接依赖。

composer show 默认只显示你手动 require 的包,不是全部已安装的——想看完整列表,必须加 --tree 或 --installed。
为什么 composer show 输出那么少?
它默认只读 composer.lock 里的顶层 packages 字段,跳过所有间接依赖(比如 monolog/monolog 被 symfony/console 拉进来,就不会出现)。这不是 bug,是设计如此。
- 没运行过
composer install或composer update的项目,composer show会报错或为空——它依赖vendor/composer/installed.json或有效的composer.lock -
vendor/被删了?那所有composer show命令都会失效,它不回退到锁文件做推测 - 包名大小写敏感:
symfony/console和Symfony/Console是两个不同包,输错就返回Package not found
查完整依赖树:用 --tree,别靠肉眼拼
只有 --tree 能还原真实安装结构,它递归读取 vendor/composer/installed.json 中记录的嵌套 requires,输出带缩进和箭头的层级关系。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 示例输出片段:
symfony/http-kernel v6.4.7 └── symfony/event-dispatcher v6.4.3 └── psr/event-dispatcher ^1.0 - 如果用了
composer install --no-dev,require-dev里的包(如phpunit/phpunit)不会出现在--tree结果里 - 终端宽度不够时长包名会被截断,建议加
| less -S或重定向:composer show --tree > deps.tree
导出干净列表给运维或 CI 用
别手写脚本去解析 composer.lock——格式在 Composer 2.x / 3.x 间不稳定;用 composer show 自带的输出更可靠。
- 导出纯文本全量列表(含版本,无颜色):
composer show --installed --no-ansi - 只导出你亲手写的依赖(排除所有子依赖):
composer show --direct --format=plain - 要带路径、autoload 等详细信息?加
--verbose,但注意这会包含vendor/绝对路径,不适合跨环境分享
查全局包别用 composer show,换 composer global show
composer show 完全无视全局配置,哪怕你在 /tmp 下执行,它也只扫当前项目的 vendor/。全局包得用专用命令。
- 查是否真装了
laravel/installer:composer global show laravel/installer,不是composer show laravel/installer - 只看自己手动
global require的包(排除自动拉进来的依赖):composer global show --direct - 输出太长?加
--name-only只留包名:composer global show --name-only
最常被忽略的一点:没有 vendor/ 目录时,所有 composer show 变体都失效——它不尝试重建、不 fallback、不提示“你可能需要先 install”,就直接沉默或报错。

















