composer show --tree 不支持反向依赖查询,需用 find + grep 扫描本地项目目录中 composer.json 文件是否显式声明目标包,或通过运行时调试(如 xdebug)追溯 autoload.php 加载链。

composer show --tree 无法直接查反向依赖
Composer 原生命令不支持“从包查项目”的反向依赖追踪,composer show --tree 只能看当前项目里某个包的依赖树(正向),不是你想要的“哪个顶级项目装了它”。想查的是:本地已安装的某个包(比如 monolog/monolog),被哪些 Composer 项目(即含 composer.json 的根目录)实际引用?这本质上是个文件系统扫描问题,不是 Composer 运行时能力范围。
用 find + grep 扫描本地项目目录
最可靠的方式是手动搜索所有可能的项目路径,检查其 composer.json 是否声明了该包。假设你把项目都放在 ~/projects 下:
find ~/projects -name 'composer.json' -exec grep -l '"monolog/monolog"' {} \;
注意几点:
- 必须用双引号包裹包名,避免匹配到类似
monolog/monolog-extra的子串 -
grep -l只输出匹配文件路径,不显示具体内容,干净易读 - 如果包用了别名或通过
replace引入,这个方法会漏掉——它只查显式声明的require字段 - Windows 用户请改用
dir /s /b composer.json配合findstr,但路径分隔符和引号需转义
检查 vendor/autoload.php 被哪些项目加载(运行时视角)
如果你关心的是“哪些项目在实际运行中加载了这个包”,可以反过来查 vendor/autoload.php 的调用链。每个 Composer 项目生成的自动加载器路径不同,但都会包含项目根路径信息:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
在 PHP 脚本中临时加一行:
echo dirname(dirname(__DIR__)); // 假设在 vendor/monolog/monolog/src/Monolog/Logger.php 里执行
但这需要你能在目标包代码里插入调试逻辑,且只适用于当前正在运行的请求。更实用的做法是:
- 启动一个调试会话(如 Xdebug),断点进
Monolog\Logger::__construct() - 看调用栈最顶层的文件路径,就是触发加载的项目入口(如
/var/www/my-api/public/index.php) - 这种方法不依赖
composer.json声明,能发现通过class_alias或手动require引入的情况
为什么没有现成的 Composer 插件做这事
因为反向依赖查询破坏了 Composer 的设计边界:它只管理单个项目依赖关系,不维护全局注册表。不同项目彼此隔离,composer global 安装的包更难追溯来源。有人写过脚本(如 composer-unused 的变种),但都基于静态分析,无法覆盖动态加载、符号链接或 symlink 到 vendor 的场景。真正可靠的方案永远是结合路径扫描 + 运行时验证——尤其当你的团队共用开发机或 CI 构建缓存时,同一个 vendor/ 目录可能被多个项目软链接复用,这时候光看 composer.json 会误判。










