composer show vendor/package --path是最直接可靠的命令,输出包根目录绝对路径(结尾带/),需在项目根目录运行且包名大小写严格匹配;composer 2.2+支持,旧版本改用composer config vendor-dir --absolute拼接;路径非类文件位置,具体源码路径需结合composer show -s查看autoload配置。

composer show vendor/package --path 是最直接、最可靠的命令,不需要查文件、拼路径或猜结构。
用 show --path 查包的物理位置
它输出的是绝对路径,结尾带 /,可直接 cd 或粘贴进文件管理器打开:
- 必须在项目根目录下运行(即包含
composer.json的目录) - 包名大小写和斜杠必须完全匹配:
monolog/monolog≠Monolog/Monolog - Composer 2.2+ 才支持该参数;旧版本会报
Unrecognized option "--path",此时改用composer config vendor-dir --absolute拼出基础路径,再手动补上vendor-name/package-name
为什么不用 vendor/composer/installed.json 手动翻?
这个文件确实存了 install-path 字段,但它有三个硬伤:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 不是实时更新:如果刚删了
vendor/但没重装,里面还是旧路径 - 内容冗长难定位:几百个包混在一起,
grep容易漏掉同名但不同 vendor 的条目(比如psr/log和psr/http-client) - 不处理符号链接:某些本地
path仓库在installed.json里记录的是真实路径,但实际是软链,show --path会自动解析到目标位置
查不到路径?先确认包是否真被安装
常见假失败场景:
-
composer show monolog/monolog --path报错Package not found→ 说明它根本没装进vendor/,可能只是require-dev里写了但没启用,或被conflict拦住了 - 想查全局包(如
laravel/installer)却用了普通show→ 必须加global:运行composer global show laravel/installer --path - 路径存在但 IDE 跳转失效 → 不是路径错了,而是
autoload_*.php没刷新,得先composer dump-autoload或composer install
真正容易被忽略的点是:路径本身不等于类文件位置。--path 返回的是包根目录,而具体类(比如 GuzzleHttp\Client)落在 src/Client.php 还是 lib/Client.php,得看它 composer.json 里的 autoload.ps4 怎么配——这点不能靠猜,要用 composer show -s vendor/package 看原始 autoload 配置。










