根本原因是PATH未包含$COMPOSER_HOME/vendor/bin(或默认~/.composer/vendor/bin),Composer只安装二进制文件但不修改PATH;需手动添加该路径并重启终端验证。

Composer 没有“全局变量”这个东西,只有 composer config --global 写入的全局配置项,以及 COMPOSER_HOME 这类控制路径的环境变量;想让 laravel 或 phpunit 命令直接可用,关键不是配 config,而是 PATH 是否包含 vendor/bin 目录。
为什么 composer global require 装了却找不到命令?
根本原因不是 Composer 没装好,而是 shell 找不到可执行文件位置。Composer 只负责把二进制脚本放进 $COMPOSER_HOME/vendor/bin(或默认的 ~/.composer/vendor/bin),它从不修改系统 PATH。
- Linux/macOS:在
~/.zshrc或~/.bashrc末尾加export PATH="$COMPOSER_HOME/vendor/bin:$PATH",然后source ~/.zshrc;若没设COMPOSER_HOME,就用export PATH="$HOME/.composer/vendor/bin:$PATH" - Windows CMD/PowerShell:把
%APPDATA%\Composer\vendor\bin(或你自定义的%COMPOSER_HOME%\vendor\bin)加进「系统属性 → 环境变量 → 用户变量 → Path」,加完必须新开终端 - 验证是否生效:
which laravel(macOS/Linux)或where laravel(Windows),输出应指向vendor/bin下的文件 - 常见静默失败点:PATH 里写了
%APPDATA%\Composer但漏了\vendor\bin;或用了~、$HOME这类非绝对路径,Composer 不识别
composer config --global 哪些值真能跨项目起作用?
不是所有配置项加了 --global 都有效。Composer 对不同字段的读取逻辑完全不同,有些是“伪全局”——看着设了,实际只在特定条件下才被读到。
- 真正稳定全局生效的:
github-oauth、http-proxy、cache-dir、process-timeout、secure-http—— 它们控制网络、缓存、超时等底层行为,项目级composer.json无法覆盖 - 看似全局、实则受限的:
minimum-stability、prefer-stable、platform—— 只有当前目录没有composer.json时(比如空目录下运行composer require)才读全局值;一旦项目存在composer.json且含config字段,它们立刻被忽略 - 完全无效的:
autoload、require、scripts—— 这些字段根本不支持全局作用域,设了也静默丢弃 - 验证方式:
composer config --global --list看是否写入成功;再对比composer config --list(不加--global),带(global)标记的才是当前生效的全局值
漏掉 --global 会怎样?
这是最高频失误:命令会默默写进当前项目的 composer.json 的 config 字段,而不是用户级配置文件。结果就是你以为换镜像成功了,其实只改了当前项目,切到别的目录就失效。
- 正确写法:
composer config --global repos.packagist composer https://mirrors.aliyun.com/composer/ - 错误写法:
composer config repos.packagist composer https://mirrors.aliyun.com/composer/(没--global,只改当前项目) - 嵌套键名要分步设,比如配私有仓库:
composer config --global repos.myrepo.type composer,再composer config --global repos.myrepo.url https://example.com - 值含空格或特殊字符时,必须用英文双引号包裹:
composer config --global cache-dir "/data/my composer cache" - Windows 用户注意:
%APPDATA%\Composer\config.json路径需真实存在;PowerShell 中若用$env:APPDATA,得确保没被转义或截断
COMPOSER_HOME 设错会导致什么?
它不存配置值,但决定所有全局文件(config.json、auth.json、vendor/bin)放哪。一旦设错,Composer 就“找不到家”,所有全局行为都会异常,且错误提示里完全不提它。
- 必须为绝对路径,不能含
~、$HOME、%USERPROFILE%;Windows 下也不能用%APPDATA%(虽然系统认,但 Composer 不认) - Linux/macOS 示例:
export COMPOSER_HOME="/opt/composer";Windows 示例:setx COMPOSER_HOME "C:\tools\composer" - 设完必须新开终端,再用
composer config --global --list确认顶部 “Global configuration file” 路径是否匹配 - 如果
composer install报Could not find package或跳过autoload,首要检查COMPOSER_HOME是否被错误覆盖
最常被忽略的是:全局配置和 COMPOSER_HOME 是两件事,前者管“写什么”,后者管“写在哪”;而 PATH 是第三件事,管“能不能执行”。三者缺一不可,但各自出问题时的现象几乎一样——命令找不到、配置不生效、下载卡住——得靠 composer config --global --list --verbose 和 which/where 逐层定位。











