Composer global 命令必须带子命令(如 require、update),直接运行会报错;global require 安装包到全局 vendor 目录并链接 bin 脚本,但需手动配置 PATH 才能调用命令。

根本不存在独立的 composer global 命令,所有“全局操作”都必须带具体子命令,比如 require、update、remove 或 exec。直接输 composer global 会报错或只显示帮助,这不是你手误,是 Composer 的设计逻辑。
composer global require 是唯一有效的安装入口
它把包装进全局 vendor 目录(默认 ~/.composer/vendor 或 %APPDATA%\Composer\vendor),并把 bin 字段声明的脚本链接到 vendor/bin/。但仅此而已——不改 PATH,就永远调不了 laravel、php-cs-fixer 这类命令。
- 别用
sudo composer global require:会导致~/.composer归属 root,后续所有全局操作权限失败;修复用chown -R $USER ~/.composer - Windows 用户注意路径展开:
%APPDATA%\Composer\vendor\bin不能直接粘贴进环境变量,得写成完整路径,如C:\Users\Alice\AppData\Roaming\Composer\vendor\bin - macOS / Linux 用户确认 shell 类型:zsh 用户改
~/.zshrc,bash 用户改~/.bash_profile;改完必须source ~/.zshrc或新开终端 - 验证是否生效:运行
which laravel(macOS/Linux)或where laravel(Windows),有输出才算成功
composer global exec 是临时绕过 PATH 的补救方案
它在 Composer ≥ 5.4 环境下可用,自动定位全局 vendor/bin 并注入 autoload,适合快速验证或低频调用。但它不是 PATH 的替代品。
- 前提是你已用
composer global require phpunit/phpunit安装过,否则提示Command "phpunit" is not defined - 不支持完整 TTY:运行
composer global exec psysh可能卡住输入,这类交互式工具仍建议走原生命令 - 参数传递需双横线分隔:
composer global exec phpstan analyse src/ --level=5 - 高频使用时,多打
composer global exec前缀反而更重,不如配好 PATH 一劳永逸
更新和卸载必须用对应 global 子命令
别手动删 ~/.composer/vendor 或硬改 composer.json,那会破坏 autoload 和依赖关系。
- 升级全部包:
composer global update—— 它读取~/.composer/composer.json,按版本约束拉最新兼容版 - 只升某一个:
composer global update friendsofphp/php-cs-fixer,比重复require更安全,不会意外引入新依赖 - 卸载包:
composer global remove vendor/package-name,例如composer global remove laravel/installer - 检查当前装了啥:
composer global show,比翻目录靠谱
PATH 配置不到位,90% 的 “command not found” 就卡在这一步;而配对了却没重载 shell 配置,剩下那 10% 就出在这里。系统找不到可执行文件从来不是 Composer 的 bug,是 Unix/Linux/Windows 的基本机制——它只认 PATH 列表里的路径,不多看一眼。


















