答案是path未配置导致命令找不到;composer global require仅将包解压并软链接可执行文件到~/.composer/vendor/bin(linux/macos)或%appdata%\composer\vendor\bin(windows),该路径必须手动加入系统path,否则shell无法定位命令。

全局安装的命令找不到,不是没装成功,而是 PATH 没生效或被更高优先级路径劫持了。
composer global require 后命令不识别?先查 PATH 和 shell 配置
Linux/macOS 下 composer global require laravel/installer 成功后,laravel 命令仍报 command not found,90% 是因为 ~/.composer/vendor/bin 没进 $PATH。
- 确认改的是当前 shell 的配置文件:
zsh改~/.zshrc,bash改~/.bash_profile - 加完必须执行
source ~/.zshrc或新开终端,否则不生效 - Windows 下要手动在「系统属性 → 环境变量」里添加完整路径:
%APPDATA%\Composer\vendor\bin(不能用变量,得展开成真实路径) - 验证方式:
which laravel有输出才算成功;echo $PATH看是否含对应 bin 目录
Windows 上 where composer 输出多个结果?说明 PATH 有冲突
执行 where composer,如果输出不止一行,比如:
C:\OpenServer\modules\php\PHP_7.4\composer.bat C:\ProgramData\ComposerSetup\bin\composer.bat
那第一行就是问题根源——它优先被调用,但可能指向损坏、过期或配置错误的批处理文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 不要删它,先临时重命名(如
composer.bat.bak),再试composer --version - 若恢复正常,说明该路径不该出现在 PATH 前段;可从系统环境变量中移除或下调顺序
- OpenServer/XAMPP/WAMP 类集成环境自带的 PHP 目录常带旧版
composer.bat,是高频冲突源
卸载 global 包后命令还在?残留 bin 文件和 autoload 映射没清
执行 composer global remove laravel/installer 后,laravel 还能运行,说明两处残留未清理:
- 手动删掉
~/.composer/vendor/bin/laravel(macOS/Linux)或%APPDATA%\Composer\vendor\bin\laravel.bat(Windows)——remove不保证删 bin - 必须紧接着运行
composer global dump-autoload,否则旧类映射仍在~/.composer/vendor/composer/autoload_psr4.php里,PHP 仍会加载 - 不执行第二步,哪怕删了 bin 文件,下次
composer global install可能复现旧行为
哪些包真该 global?哪些必须进项目?判断只看是否参与运行逻辑
全局与项目依赖冲突的本质不是“装了两次”,而是 PHP 自动加载器在同一个 CLI 进程里只能加载一个版本的类。当 symfony/console v5(global)和 v6(项目)同时存在,就可能触发 Class not found 或 Cannot redeclare。
- ✅ 适合 global:纯命令行工具,不被项目代码
require或autoload,比如laravel/installer、deployer/deployer - ⚠️ 强烈建议进项目:测试类库(
phpunit/phpunit)、静态分析(phpstan/phpstan)、格式化(friendsofphp/php-cs-fixer)——它们常被phpunit.xml、CI 脚本或composer.json的scripts字段调用,且版本敏感 - ❌ 绝对禁止 global:任何运行时依赖,如
guzzlehttp/guzzle、monolog/monolog——全局安装会让composer.lock失效,部署时行为不可控
真正容易被忽略的是 autoload 映射残留和 PATH 中隐藏的低优先级路径——它们不会报错,但会让命令行为变得不可预测。










