Composer全局安装的包命令不可用,本质是系统PATH未包含其bin目录;需手动将~/.composer/vendor/bin(Linux/macOS)或%APPDATA%Composerendorin(Windows)加入PATH,并确保PHP已正确配置到PATH中。

composer global install 的命令行找不到包
执行 composer global install 后,安装的包(比如 laravel/installer)在终端里直接敲 laravel 报 “command not found”,本质是系统 PATH 没包含 Composer 全局 bin 目录。
Composer 默认把全局包的可执行文件放在 ~/.composer/vendor/bin(Linux/macOS)或 %APPDATA%Composerendorin(Windows),但它不会自动加进 PATH。
- Linux/macOS:检查
echo $PATH是否含~/.composer/vendor/bin;没含就往~/.bashrc或~/.zshrc末尾加一行:export PATH="$HOME/.composer/vendor/bin:$PATH",然后source ~/.zshrc - Windows(CMD/PowerShell):用系统环境变量 GUI 把
%APPDATA%Composerendorin加进用户 PATH;PowerShell 用户注意:修改后新开终端才生效,且不能用$env:PATH += "..."临时追加——它不持久,也影响不到其他进程 - 别用
composer config --global bin-dir改路径来“绕开”问题——改了只是换了个目录,PATH 还是得手动配,反而容易漏同步
为什么 composer global require 后 bin 文件没生成
不是所有包都提供可执行文件。只有包的 composer.json 里声明了 "bin" 字段,Composer 才会在 vendor/bin 下建软链接或批处理脚本。
比如 phpunit/phpunit 有 "bin": ["phpunit"],装完就能直接跑 phpunit;但 monolog/monolog 没 bin 字段,装了也没法命令行调用。
- 查一个包有没有命令行入口:看它的 GitHub 主页或 Packagist 页面的 “Binaries” 栏,或直接翻它源码里的
composer.json -
composer global require foo/bar成功不代表能敲foo——先确认它真提供了bin,再检查 PATH - 如果包只写了
"bin": ["script.php"],而你本地没装 PHP CLI 或php不在 PATH,那script.php脚本本身也执行不了
Windows 上 composer global 的 bat 文件执行报错 “‘php’ 不是内部或外部命令”
Composer 在 Windows 全局安装时,会为每个 bin 生成 .bat 文件(如 laravel.bat),内容是调用 php xxx.php。如果系统找不到 php,就会报这个错。
这不是 Composer 的 bug,是 PHP 环境没配好——php 命令本身在任意目录都该可用。
- 运行
where php(CMD)或Get-Command php(PowerShell),看是否返回路径;没返回说明 PHP 没加进系统 PATH - 别在
composer.json里硬编码 PHP 路径(比如写成"bin": ["C:\php\php.exe laravel"])——这违反 Composer 设计逻辑,下次更新会覆盖 - 如果 PHP 是通过 XAMPP/WAMP 安装的,记得勾选“Add to PATH”选项,或者手动把
XAMPPphp目录加进环境变量
全局 bin 路径和项目本地 vendor/bin 冲突怎么办
当全局 ~/.composer/vendor/bin 和当前项目 ./vendor/bin 都有同名命令(比如都装了 php-cs-fixer),系统优先执行 PATH 里排前面的那个——通常是全局的。
这会导致你以为在用项目锁死的版本,实际调的是全局最新版,CI 构建可能失败。
- 临时用项目本地版:显式写路径,比如
./vendor/bin/php-cs-fixer - 长期规避冲突:开发中尽量少用
composer global,改用composer require --dev+scripts配置,用composer run fix代替直接调命令 - 检查当前哪个生效:运行
which php-cs-fixer(macOS/Linux)或where php-cs-fixer(Windows)
PATH 顺序、PHP 可执行性、包自身是否带 bin——这三个点漏掉任何一个,全局命令都跑不起来。尤其 Windows 用户容易卡在 bat 调用 php 这一层,别急着重装 Composer。










