composer全局命令可用的本质是将composer.phar加入系统path;全局包默认存于~/.composer/vendor/(linux/macos)或%userprofile%\appdata\roaming\composer\vendor\(windows),由composer_home环境变量控制;其二进制文件需手动加入path才可直接调用。

Composer 全局安装不是“装一次就能全局用”,而是指把 composer.phar 放到系统 PATH 里,让它在任意目录下都能被识别为命令;所谓“全局目录”也不是 Composer 自己管理的,是你手动指定的、存放全局包(如 laravel/installer)的位置。
怎么让 composer 命令在终端任何地方都可用
本质就是把可执行文件加进系统 PATH。Linux/macOS 和 Windows 路径习惯不同,但逻辑一致:
- 下载官方
composer.phar:运行curl -sS https://getcomposer.org/installer | php,得到本地composer.phar - 把它挪到系统级可执行路径下,比如
/usr/local/bin/composer(macOS/Linux),或C:\ProgramData\ComposerSetup\bin\composer.bat(Windows) - 确保目标目录已在 PATH 中(
echo $PATH或echo %PATH%查看);没加就手动追加,比如 macOS 在~/.zshrc末尾加export PATH="/usr/local/bin:$PATH" - 重启终端,运行
composer --version验证是否生效
常见错误现象:command not found: composer —— 大概率是 PATH 没生效,或者文件没给执行权限(Linux/macOS 下记得 chmod +x /usr/local/bin/composer)。
全局包(global package)默认装在哪?怎么改
Composer 全局包实际装在 ~/.composer/vendor/(Linux/macOS)或 %USERPROFILE%\AppData\Roaming\Composer\vendor\(Windows)。这个位置由 Composer 的 COMPOSER_HOME 环境变量控制,不是靠安装方式决定的。
- 想换全局包目录?先设环境变量:
export COMPOSER_HOME="/path/to/my-composer-home(Linux/macOS),Windows 用setx COMPOSER_HOME "D:\my-composer" - 设完后首次运行
composer global install会自动创建新目录结构 - 注意:改了
COMPOSER_HOME后,旧全局包不会自动迁移,得手动复制或重装 - 验证是否生效:运行
composer global config home,输出应是你设的新路径
性能影响不大,但兼容性要注意:某些 IDE 或脚本硬编码了旧路径,改了之后可能找不到已安装的全局工具(比如 phpunit)。
为什么 composer global require 装的包不直接可用
因为全局包的二进制文件(如 laravel、phpunit)默认放在 ~/.composer/vendor/bin/,这个路径通常不在系统 PATH 里。
- 必须手动把该 bin 目录加进 PATH,例如:
export PATH="$HOME/.composer/vendor/bin:$PATH" - Windows 用户对应加的是
%COMPOSER_HOME%\vendor\bin - 否则会报错:
bash: laravel: command not found - 有些包(如
hirak/prestissimo)是插件,不提供命令行入口,装了也不需要加 PATH
最容易被忽略的一点:PATH 修改后只对新终端生效;已经打开的终端要 source ~/.zshrc 或重启,否则永远找不到命令。
真正麻烦的从来不是“怎么装”,而是 PATH 层层叠加后哪个配置在起作用、COMPOSER_HOME 和 ~/.composer 是否指向同一处、以及全局 bin 目录有没有被 shell 忘记扫描——这些细节一错,命令就消失得莫名其妙。










