composer怎么查看包的依赖关系_使用composer depends【重点】

2次阅读

composer depends 是查“谁依赖了我”的唯一可靠命令,它基于 vendor/composer/installed.json 和 composer.lock 计算真实依赖链,结果可信、快速、离线,需在项目根目录执行且仅反映已安装状态。

composer 怎么查看包的依赖关系_使用 composer depends【重点】

composer depends 是查“谁依赖了我”的唯一可靠命令

想快速知道 monolog/monolog 是被 laravel/framework 还是 symfony/console 拉进来的?直接跑 composer depends monolog/monolog。它不是猜的,而是读 vendor/composer/installed.jsoncomposer.lock 算出来的实际依赖链,结果可信、速度快、不依赖网络。

  • 必须在项目根目录执行,否则报错“Could not find package”
  • 如果包没装上(比如你删了 vendor 但没 composer install),命令会失败——它只看已安装状态,不查 Packagist 元数据
  • 输出里带箭头的层级(如 your/project → guzzlehttp/guzzle → psr/http-client)表示间接路径,不是所有行都是直接 require

加 –tree 让依赖路径一目了然

composer depends 默认平铺列出包名,但看不出嵌套关系。加 --tree 就能还原真实引用链,尤其适合排查版本冲突:比如两个不同分支都引了 phpunit/phpunit,但一个要 v9,一个要 v10,树状输出能立刻定位分叉点。

  • 示例:composer depends symfony/yaml --tree 可能输出:
    your/project<br>└── laravel/framework<br>    └── symfony/yaml
  • 注意:它不会显示 dev 依赖(除非你手动加 --dev),而很多测试工具链藏在 dev 里,漏掉可能误判
  • 如果输出过长,用 composer depends xxx --tree | head -20 先看顶层,避免滚动失焦

别把 composer show –tree 和 composer depends 搞混

composer show --tree monolog/monolog 查的是“这个包自己依赖谁”,是向下查;composer depends monolog/monolog 查的是“谁依赖了它”,是向上查。方向反了,结论就完全相反。

  • 常见错误:看到 monolog/monologcomposer show --tree 里出现在某包下面,就以为是那个包主动 require 的——其实可能是它的子依赖引入的,真正源头得靠 depends
  • composer show --tree 无法跨包追溯,比如 A→B→C,你想知道谁引了 C,show --tree A 会显示 C,但不会告诉你 B 是中间层;depends C 才会明确列出 A 和 B
  • 想验证某个包是不是冗余?先 composer depends xxx,如果返回空,再结合 composer why-not xxx 看是否被禁止安装,比盲删安全得多

依赖来源不在 vendor 里?那 depends 就查不到

composer depends 只分析当前 vendor/ 目录的真实安装结构。如果你用 path 仓库、repositories 本地源,或者包被 replaceprovide 掉了,它可能显示“未找到”或漏掉某些路径。

  • 私有包走 path 类型仓库时,composer depends 仍能识别,但要求该路径下有合法 composer.json 且已成功 install
  • "replace": {"psr/log": "*"} 的包,不会出现在 depends psr/log 结果中——因为 Composer 认为它已被替代,逻辑上“不存在”
  • 需要全局视角?去 Packagist 的 Dependents 页面 看公开引用,但那是静态声明,不反映你项目里的实际解析结果

依赖关系不是静态快照,而是 Composer 解析器在特定 lock 文件、PHP 版本、平台配置下算出的结果。同一行 composer depends 命令,在 CI 环境和本地执行,可能因 platform 配置不同而输出不一致。

星耀云
版权声明:本站原创文章,由 星耀云 2026-03-20发表,共计1678字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources