composer global require 并非真正全局安装,而是将包安装到 Composer 全局 vendor 目录,命令可用需手动将 vendor/bin 加入系统 PATH;否则会报 command not found。

composer global require 本身不是“全局安装命令”,而是将包装进 Composer 的全局 vendor 目录;真正让命令可用的,是把 vendor/bin 路径加进系统 PATH 环境变量——否则敲 laravel 或 phpunit 会直接报 command not found。
怎么确认全局安装路径?
Composer 不会自动告诉你二进制文件在哪,必须手动查。运行:
composer config --global home
输出类似 /home/alex/.composer(Linux/macOS)或 C:\Users\alex\AppData\Roaming\Composer(Windows)。这个目录下的 vendor/bin 才是最终可执行文件所在位置。
- Linux/macOS 实际路径通常是:
$HOME/.composer/vendor/bin - Windows 实际路径通常是:
%APPDATA%\Composer\vendor\bin - 用
composer global config bin-dir --absolute也能直接输出完整bin路径
为什么装完还不能直接运行命令?
因为 shell 根本找不到它——vendor/bin 没在 PATH 里。这是最常被跳过的一步,也是唯一导致“明明装了却用不了”的原因。
- Linux/macOS:编辑
~/.zshrc或~/.bashrc,追加:export PATH="$HOME/.composer/vendor/bin:$PATH" - Windows:在“系统属性 → 环境变量”中,把
%APPDATA%\Composer\vendor\bin加入用户级PATH - 改完别忘了重载配置:
source ~/.zshrc(macOS/Linux),或重启终端/CMD/PowerShell(Windows)
如何验证是否生效?
别只信 composer global list 显示已安装——那只是说明包进 vendor 了,不代表命令能调用。
- 先检查
PATH是否包含目标路径:echo $PATH(Linux/macOS)或echo %PATH%(Windows) - 再试运行一个已安装工具的命令,比如:
laravel --version或phpunit --version - 如果报
command not found,99% 是PATH没生效,或写错了路径(注意 Windows 中%APPDATA%展开后是完整路径,不能直接写变量名)
能不能换全局安装位置?
可以,但不推荐随意改。改路径本质是改 COMPOSER_HOME,影响所有全局行为(包括缓存、配置、插件等)。
- 设置新路径:
composer config --global home /opt/my-composer - 之后所有
global require都会装到/opt/my-composer/vendor - 你仍需手动把新路径下的
vendor/bin加进PATH,且确保该目录有读写权限 - 若改错,用
composer config --global --unset home可恢复默认
composer global require 只负责复制文件,PATH 才决定你能不能敲出命令。漏掉任何一环,都会让你反复怀疑是不是网络问题、权限问题、或者 Composer 坏了——其实只是少了一行 export PATH=...。










