全局命令不可用主因是PATH未配置,而非安装失败;composer global require仅将包装入全局vendor目录并链接bin脚本,必须手动将~/.composer/vendor/bin(Linux/macOS)或%APPDATA%\Composer\vendor\bin(Windows)加入系统PATH,并重载配置后才能调用。

全局包装了却用不了,90% 是因为 PATH 没配对,不是安装失败。
composer global require 为什么装完命令还是 command not found
它只做两件事:把包放进 ~/.composer/vendor(Linux/macOS)或 %APPDATA%\Composer\vendor(Windows),再把 bin 字段声明的脚本软链接到对应 vendor/bin 目录。不改系统 PATH,shell 根本找不到那个可执行文件。
常见错误现象:
-
which laravel或where laravel无输出 -
echo $PATH(macOS/Linux)或echo %PATH%(Windows)里没出现~/.composer/vendor/bin或%APPDATA%\Composer\vendor\bin - 误以为
composer global是个独立命令,输完直接报错
实操建议:
- 先确认全局根目录:
composer config --global home,再拼出真实 bin 路径 - macOS/Linux:在
~/.zshrc(zsh 用户)或~/.bash_profile(bash 用户)末尾加export PATH="$HOME/.composer/vendor/bin:$PATH",然后运行source ~/.zshrc - Windows:在「环境变量」→「用户变量」→「Path」中新增完整路径,例如
C:\Users\Alice\AppData\Roaming\Composer\vendor\bin(不能写%APPDATA%) - 改完必须新开终端,旧窗口不会重载 PATH
composer global 的子命令有哪些,哪些不能省略
composer global 本身不是命令,必须带子命令才能执行。直接输 composer global 会报错或只显示帮助——这是 Composer 的设计逻辑,不是你打错了。
常用且有效的子命令:
-
composer global require:安装全局包,如laravel/installer、php-cs-fixer -
composer global update:更新所有已安装的全局包 -
composer global remove:卸载全局包(Composer ≥ 2.5) -
composer global exec:临时调用全局 bin 脚本,绕过 PATH(Composer ≥ 5.4),例如composer global exec laravel new blog
容易踩的坑:
- 别用
sudo composer global require:会导致~/.composer归属 root,后续所有全局操作权限失败;修复需chown -R $USER ~/.composer -
composer global require不接受--dev,所有全局包默认都是“开发工具”,加了也无效 - 全局配置凭据(如
github-oauth)和全局包安装是两回事,别指望装了包就自动授权
怎么验证全局包是否真正可用
不能只看 composer global list 或 composer show -g ——它们只说明包在 vendor 目录里,不保证命令能执行。
真正有效的验证方式:
- macOS/Linux:
which laravel(或你装的其他命令名),有路径输出才算成功 - Windows:
where laravel,同理 - 运行一次实际命令,比如
laravel --version或php-cs-fixer --version,看是否报错
如果 which/where 无输出但 composer global exec 能跑,说明 PATH 确实没生效,不是包的问题。
额外注意点:
-
composer global exec是补救方案,不是替代方案;它每次都要启动 Composer 自动加载,比直接调用慢,不适合高频使用 - 删掉
~/.composer/vendor后,所有全局命令立刻失效——因为只是软链接,源文件没了,链接就断了 - 不同 shell(zsh/bash/fish)可能读不同的配置文件,改错文件等于白改
composer config --global 和全局包的关系
它不管理包,只管 Composer 自身行为。比如换镜像源、设缓存路径、存 GitHub Token,这些会影响全局包的下载过程,但不决定命令能不能调用。
关键区别:
-
composer global require→ 放包、建链接 -
composer config --global→ 写~/.composer/config.json,影响所有全局操作的上下文
必须用 --global 的典型配置:
-
composer config --global repos.packagist composer https://mirrors.aliyun.com/composer/(换国内镜像) -
composer config --global github-oauth.github.com abc123(防 API 限流) -
composer config --global cache-dir "/data/composer-cache"(避免 SSD 被缓存占满)
容易被忽略的细节:
- 值含空格必须用英文双引号包裹,例如
composer config --global cache-dir "/data/my cache" - 嵌套键(如自定义仓库)要分步设置,不能一次写全:
composer config --global repos.myrepo.type "composer",再composer config --global repos.myrepo.url "https://example.com" - 全局配置里的
bin-dir默认就是vendor/bin,改它不如直接配对 PATH;改了也不会自动迁移已有链接


















