Composer全局bin路径由COMPOSER_HOME环境变量决定,实际路径可通过composer global config bin-dir --absolute命令获取,该命令适用于Composer 2.x及以上版本。

Composer 全局 bin 路径就是 ~/.composer/vendor/bin(Linux/macOS)或 %USERPROFILE%\AppData\Roaming\Composer\vendor\bin(Windows),但实际生效路径取决于 COMPOSER_HOME 环境变量——它可能被自定义过,所以不能硬背。
直接查当前生效的全局 bin 目录
运行这条命令,它会输出 Composer 实际使用的 bin 路径:
composer global config bin-dir --absolute
这个命令不依赖你是否装过任何全局包,只要 Composer 可用就能执行。输出结果就是你 shell 里输入全局命令(比如 laravel、phpunit)时真正查找的目录。
- 如果报错
Command "global" is not defined,说明你用的是非常老的 Composer 1.x 版本(composer self-update - 输出路径末尾不含斜杠,复制后别手动加
/ - 该路径不一定存在物理目录,
composer global require第一次安装包时才会自动创建
为什么 which laravel 找不到,但命令又能运行?
常见于 macOS 或 Linux 用户:明明运行过 composer global require laravel/installer,也确认 ~/.composer/vendor/bin 有 laravel 文件,但 which laravel 返回空——根本原因是 shell 没把该目录加入 $PATH。
- 检查是否已加入 PATH:
echo $PATH | grep -o "/.*composer.*bin" - 没命中?需要手动追加,例如在
~/.zshrc或~/.bashrc中加一行:export PATH="$HOME/.composer/vendor/bin:$PATH" - Windows 用户需确认该路径已添加到系统或用户级「环境变量 → Path」中,并重启终端或 CMD/PowerShell
- 修改 PATH 后,别忘了重载配置:
source ~/.zshrc(macOS/Linux)或新开终端(Windows)
COMPOSER_HOME 被改过怎么办?
如果你或团队设过 COMPOSER_HOME,比如 export COMPOSER_HOME="$HOME/.config/composer",那全局 bin 就不在默认位置了——所有路径都以它为根。
- 查当前值:
echo $COMPOSER_HOME(Linux/macOS)或echo %COMPOSER_HOME%(Windows) - 对应 bin 目录就是
$COMPOSER_HOME/vendor/bin,不是默认路径 - 临时覆盖它来验证:
COMPOSER_HOME=/tmp/test-composer composer global config bin-dir --absolute - 长期修改建议写入 shell 配置文件,避免每次手动 export
最易忽略的一点:即使路径正确、PATH 已配、文件可执行,某些全局命令(如 phpstan)仍可能因 PHP 版本或扩展缺失而报错——bin-dir 只管“在哪找”,不管“能不能跑”。先确保 php -v 和所需扩展就位,再排查路径问题。











