composer show vendor/package --path 可查看指定包安装路径,需 composer 2.2+;路径指向 vendor/vendor-name/package-name/ 根目录,非 src/ 或 lib/ 子目录。

composer show 查看包安装路径
执行 composer show -i 会列出所有已安装的包及其版本,但默认不显示路径;加 --path 参数才能看到实际存放位置。注意这个参数只在 Composer 2.2+ 支持,旧版本会报错 Unrecognized option "--path"。
- 推荐命令:
composer show vendor/package --path(替换为具体包名) - 如果不确定包名,先用
composer show找全名,比如monolog/monolog不是monolog - 路径指向的是
vendor/vendor-name/package-name/下的根目录,不是src/或lib/子目录
vendor/autoload.php 能不能直接 require 到源码?
不能。Composer 的自动加载机制只负责把类名映射到文件路径,不提供“一键打开源码”的能力。你看到的 vendor/autoload.php 是一个引导文件,它本身不包含任何业务逻辑代码。
- 真正加载的源码在
vendor/下对应包的目录里,比如vendor/guzzlehttp/guzzle/src/Client.php - IDE(如 PHPStorm)能跳转,靠的是解析
composer.json中的autoload字段 + 文件系统索引,不是靠autoload.php运行时返回路径 - 别试图
require_once 'vendor/autoload.php'后再用debug_print_backtrace()反推路径——不可靠,且和实际安装结构无关
为什么 vendor 目录下有些包没 src/,有些又分 lib/ 和 src/?
这是包作者定义的目录结构,Composer 不强制规范。它只按 composer.json 里的 autoload 配置去注册 PSR-4、PSR-0 或 classmap 映射。
- 常见情况:
"autoload": {"psr-4": {"GuzzleHttp\": "src/"}}→ 类GuzzleHttpClient对应src/Client.php - 老项目可能用
"classmap": ["lib/"]→ 所有lib/下的 PHP 文件都会被扫描并建立类名→路径映射 - 如果你改了包里的目录结构但没同步更新
composer.json的 autoload,composer dump-autoload后仍然找不到类
想快速定位某个类在哪个文件?用 composer dump-autoload -a 配合 grep
composer dump-autoload -a 会生成完整的 classmap(含所有类的绝对路径),结果存在 vendor/composer/autoload_classmap.php。这是最稳的“源码位置索引”。
- 查类
IlluminateSupportStr:grep "Str" vendor/composer/autoload_classmap.php - 输出类似:
'Illuminate\Support\Str' => $vendorDir . '/illuminate/support/Str.php' - 注意:这个文件是动态生成的,每次
composer install或dump-autoload都会重写,别手动编辑 - 如果包用了 PSR-4 但没跑
-a,classmap 里不会有它的条目——所以必须加-a强制全量扫描
dump-autoload -a 就别指望 grep 出来。










