composer show vendor/package --path 可查看指定包安装路径,需 Composer 2.2+;路径指向 vendor/vendor-name/package-name/ 根目录,非 src/ 或 lib/ 子目录。
composer
show 查看包安装路径
执行
会列出所有已安装的包及其版本,但默认不显示路径;加
参数才能看到实际存放位置。注意这个参数只在 Composer 2.2+ 支持,旧版本会报错
。
推荐命令:
(替换为具体包名)
如果不确定包名,先用
找全名,比如
不是
路径指向的是
下的根目录,不是
或
子目录
vendor/autoload.php 能不能直接 require 到源码?
不能。Composer 的自动加载机制只负责把类名映射到文件路径,不提供“一键打开源码”的能力。你看到的
是一个引导文件,它本身不包含任何业务逻辑代码。
真正加载的源码在
下对应包的目录里,比如
IDE(如 PHPStorm)能跳转,靠的是解析
中的
字段 + 文件系统索引,不是靠
运行时返回路径
别试图
后再用
反推路径——不可靠,且和实际安装结构无关
为什么 vendor 目录下有些包没 src/,有些又分 lib/ 和 src/?
这是包作者定义的目录结构,Composer 不强制规范。它只按
里的
配置去注册 PSR-4、PSR-0 或 classmap 映射。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
常见情况:
→ 类
对应
老项目可能用
→ 所有
下的 PHP 文件都会被扫描并建立类名→路径映射
如果你改了包里的目录结构但没同步更新
的 autoload,
后仍然找不到类
想快速定位某个类在哪个文件?用 composer dump-autoload -a 配合 grep
会生成完整的 classmap(含所有类的绝对路径),结果存在
。这是最稳的“源码位置索引”。
查类
:
输出类似:
注意:这个文件是动态生成的,每次
或
都会重写,别手动编辑
如果包用了 PSR-4 但没跑
,classmap 里不会有它的条目——所以必须加
强制全量扫描
路径不是藏在配置里,是写死在 autoload_classmap.php 生成逻辑中;没跑过
就别指望 grep 出来。
composer show -i--pathUnrecognized option "--path"composer show vendor/package --pathcomposer showmonolog/monologmonologvendor/vendor-name/package-name/src/lib/vendor/autoload.phpvendor/vendor/guzzlehttp/guzzle/src/Client.phpcomposer.jsonautoloadautoload.phprequire_once 'vendor/autoload.php'debug_print_backtrace()composer.jsonautoload"autoload": {"psr-4": {"GuzzleHttp\": "src/"}}GuzzleHttpClientsrc/Client.php"classmap": ["lib/"]lib/composer.jsoncomposer dump-autoloadcomposer dump-autoload -avendor/composer/autoload_classmap.phpIlluminateSupportStrgrep "Str" vendor/composer/autoload_classmap.php'Illuminate\Support\Str' => $vendorDir . '/illuminate/support/Str.php'composer installdump-autoload-a-adump-autoload -a