运行 composer show guzzlehttp/guzzle --path 可直接查看其源码解压路径,如 vendor/guzzlehttp/guzzle;类加载由 vendor/composer/autoload_psr4.php 中的 guzzlehttp\ → vendor/guzzlehttp/guzzle/src 映射决定。

composer show --path 能直接看到包装在哪
想知道 guzzlehttp/guzzle 的源码实际解压在你机器的哪个文件夹?最简单有效的方式就是运行:
composer show guzzlehttp/guzzle --path它会输出类似
vendor/guzzlehttp/guzzle 的路径——这就是该包的根目录。注意:这个命令只对已安装的包有效;如果提示 “Package not installed”,说明你还得先 composer require guzzlehttp/guzzle。
类文件找不到?得看 autoload_psr4.php 里的前缀映射
光知道包装在哪还不够,真正决定 new GuzzleHttpClient() 加载哪个文件的,是 PSR-4 映射规则。Composer 把这些规则写进了 vendor/composer/autoload_psr4.php。打开它,你会看到类似这样的数组:
return [ 'GuzzleHttp\' => ['vendor/guzzlehttp/guzzle/src'],];也就是说,
GuzzleHttpClient 最终对应到 vendor/guzzlehttp/guzzle/src/Client.php。容易踩的坑:
- 前缀必须严格以反斜杠结尾(
GuzzleHttp\≠GuzzleHttp) - 多个前缀重叠时,取最长匹配项(比如
SymfonyComponentHttpFoundation\优先于Symfony\) - 如果类名完全不匹配任何前缀,可能是拼错命名空间,或该包根本没配 autoload
想看原始 Git 仓库地址?用 -s 参数
要确认一个包是不是从 GitHub 拉的、有没有被镜像代理过、甚至是不是公司私有 fork,就得查它的 source 地址。运行:
composer show -s guzzlehttp/guzzle你会看到
"source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", ... }。关键点:
-
-s(即--source)只对已安装包生效 - 未安装的包,得去 Packagist API 查 JSON 数据里的
source.url - 如果用了国内镜像(如阿里云),
composer config --list | grep repos可确认是否启用了 proxy/mirror
全局安装的包路径和 bin 文件不是一回事
执行 composer global require laravel/installer 后,源码其实放在 ~/.composer/vendor/laravel/installer(Linux/macOS)或 %APPDATA%Composerendorlaravelinstaller(Windows),但你能直接敲 laravel 命令,是因为 Composer 把可执行脚本软链接(或复制)到了 ~/.composer/vendor/bin/。所以:
- 查源码位置:用
composer config --global vendor-dir得到根路径,再拼上包名 - 查命令在哪:用
which laravel(Linux/macOS)或Get-Command laravel(PowerShell) - 务必确保
~/.composer/vendor/bin已加入系统$PATH,否则命令不可用
真正麻烦的从来不是找到路径,而是当路径变了之后,autoload.php 的 require、IDE 的索引、CI 脚本里的 vendor/bin/phpunit 全都得跟着动——漏掉一个,就 Class not found 或 command not found。










