Composer root-reqs参数怎么用 仅显示根依赖包信息【技巧】

10次阅读

composer show –root-reqs 用于列出当前项目中实际安装的顶层依赖包(即 composer.json 中 require 字段声明且已安装的包),仅支持纯文本输出,不支持 json 格式,且要求 Composer 2.2+ 版本。

Composer root-reqs参数怎么用 仅显示根依赖包信息【技巧】

composer show –root-reqs 只显示根依赖包

直接运行 composer show --root-reqs 即可列出当前项目 composer.json 中声明的顶层依赖(即你手动执行 composer require xxx 添加的包),不包含任何递归依赖。这是最常用也最可靠的用法。

注意:该参数从 Composer 2.2 开始引入,低于此版本会报错 Unrecognized option: --root-reqs;若用的是旧版 Composer,请先升级或改用其他方式模拟。

为什么不用 composer show 或 composer show –tree

composer show 默认列出所有已安装包(含传递依赖),数量动辄上百,根本无法聚焦“你自己写了哪些 require”;composer show --tree 虽能看依赖结构,但默认从 root 包展开,信息冗余且层级深,不适合快速核对根依赖清单。

常见误操作:composer show --root-reqs --format=json 看似合理,但实际不生效——--root-reqs 不支持 JSON 输出格式,强行加会静默忽略该 flag,返回全部包的 JSON。只支持纯文本输出。

配合 grep 或脚本提取特定信息

如果只想看包名和版本号(去掉描述),可用 shell 管道处理:

composer show --root-reqs | awk '{print $1 " " $2}'

或者导出为简单列表供 CI 检查:

  • 检查是否包含某关键包:composer show --root-reqs | grep -q "^monolog/monolog"
  • 统计根依赖数量:composer show --root-reqs | wc -l
  • 排除 dev-only 依赖(需额外过滤):composer show --root-reqs | grep -v "require-dev" —— 注意这不可靠,因为输出不标记来源字段,更稳妥的方式是解析 composer.json 本身

替代方案:直接读取 composer.json 更准确

当需要 100% 确保“仅你写的 require”,绕过 Composer 安装状态干扰(比如某些包被删了但 composer.json 还留着),直接解析 JSON 更可靠:

jq -r 'keys_unsorted[] as $k | "($k) (.[$k])"' composer.json | grep -E "^require>" | sed 's/^require.//'

不过这就脱离了 Composer 命令范畴。日常运维中,composer show --root-reqs 已足够轻量、直观,唯一要记住的是:它反映的是「当前 lock 文件里实际安装的根依赖」,不是 composer.json 的原始快照——如果执行过 composer update xxx 但没 commit lock,结果可能和同事看到的不一致。

text=ZqhQzanResources