composer show --path 默认只查项目 vendor 包,全局包需用 composer global show --path;路径可能是共享副本真实路径;批量查需结合 xargs 或 JSON 解析;Windows 空格路径需用引号或 POSIX 环境。

composer show --path 查不到包路径?先确认是否用了全局安装
默认情况下 composer show --path 只显示当前项目 vendor/ 下的包路径,对全局安装的包(比如用 composer global require laravel/installer 装的)完全不生效。查全局包得换命令:composer global show --path vendor/package-name —— 注意必须带包名,且 global show 不支持通配符或不带参数的列表模式。
显示的路径是软链接还是真实路径?取决于包类型
Composer 从 2.2 开始默认启用「可重用 vendor」机制(composer install --no-plugins 或禁用 vendor-dir 配置时更明显),某些包可能指向 ~/.composer/vendor/ 下的共享副本,composer show --path 显示的就是那个真实路径,不是项目内 vendor/ 的符号链接。如果看到路径里含 .composer 或 cache 字样,说明它被复用了 —— 这不影响运行,但改代码调试时容易误编辑错位置。
想批量查多个包路径?别用 --path,改用 JSON 输出解析
composer show --path 一次只能查一个包,且输出格式不统一(有缩进、有空行),不适合脚本处理。更可靠的方式是:
composer show -N | xargs -n1 composer show --path
或者直接用结构化输出:
composer show -f json | jq '.packages[].name, .packages[].dist.source-url'
注意:--path 在 JSON 模式下不生效,但 dist.source-url 或 source.url 字段能帮你定位源码来源;真正要路径,还是得回退到单包 + --path 组合。
Windows 下路径含空格或中文?命令行可能截断
在 PowerShell 或旧版 CMD 中执行 composer show --path vendor/name,如果返回路径含空格(如 C:\Users\My Name\AppData\...),部分 shell 会把路径按空格切开,导致后续命令报错。解决方法很简单:
- 用 Git Bash 或 Windows Terminal + WSL,环境更接近 POSIX
- 强制用双引号包裹结果:在脚本中写成
"$(composer show --path vendor/name)" - 避开空格路径:设置 Composer 全局配置
composer config --global cache-dir "C:/composer-cache",减少用户目录干扰
路径本身没问题,问题出在 shell 对输出的解析逻辑上 —— 这点很容易被当成 Composer 的 bug。










