composer show --direct 是唯一能准确列出 composer.json 中 require 和 require-dev 明文声明的直接依赖的命令,它读取 composer.json 而非 vendor/ 状态,未安装的声明包也会显示,且不支持与 --tree 共用。

composer show 默认列出所有依赖(含嵌套),要只看直接依赖,得加 --direct 参数。
用 composer show --direct 精确筛选顶层包
这个参数会跳过所有传递依赖,只显示 composer.json 中 require 和 require-dev 明确声明的包。它不关心这些包自己还拉了什么,也不受 vendor/ 实际安装状态影响——只要声明了,就列出来。
- 执行
composer show --direct时,Composer 读取的是本地composer.json,不是composer.lock - 如果某个包在
require里但尚未安装(比如刚改完 JSON 没 run install),它仍会出现在结果中 - 开发依赖同样被包含,除非额外加
--no-dev
想看结构但又不想滚动几百行?composer show --tree --direct 不生效
--tree 和 --direct 不能共存:前者强制展开整个依赖图,后者要求只取顶层。两者逻辑冲突,Composer 会直接忽略 --direct 并报错或静默回退到全量树状输出。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 错误现象:
composer show --tree --direct输出仍是完整依赖树,甚至可能提示Unknown option: --direct(旧版 Composer) - 替代方案:先用
composer show --direct得到包列表,再对单个包查其子依赖,例如composer show --tree monolog/monolog - 注意
--tree查的是已安装包的实际依赖关系,若某包没装,会报Package not found
为什么不用 composer show | head -20 这类管道截断?
直接管道截断不可靠——依赖数量浮动大,且 composer show 输出顺序不固定(尤其跨版本),可能把某个直接依赖的子依赖片段截在顶部,造成误判。
- 更糟的情况:某些包名带空格或特殊字符,
head截断后字段错位,人眼难以识别是否为直接依赖 -
--direct是语义化过滤,结果稳定、可脚本化;而文本截断是临时补丁,容易在 CI 或不同环境失效 - 若需导出为机器可读格式,可用
composer show --direct --format=json,比解析纯文本安全得多
真正要注意的是:Composer 2.2+ 才默认支持 --direct;低于该版本需升级或改用 composer show --platform 配合手动比对,但那已经不是“只列直接依赖”了。










