根本原因是全局bin目录未加入path,需先运行composer global config bin-dir --absolute确认真实路径(新版默认~/.config/composer/vendor/bin或%appdata%\composer\vendor\bin),再将其添加到对应shell或系统环境变量并重载。

composer global require装了但命令找不到
不是包没装成功,是系统根本没去那个目录找可执行文件。全局安装的命令(比如 laravel、phpunit)默认放在 Composer 的全局 bin 目录下,这个路径和 composer 自身的路径完全无关,必须手动加进 PATH 才能调用。
先确认真实路径:
运行 composer global config bin-dir --absolute,输出的就是你要加的路径。别凭记忆写 ~/.composer/vendor/bin——新版 Composer(2.4+)默认已迁移到 ~/.config/composer/vendor/bin(macOS/Linux),Windows 是 %APPDATA%\Composer\vendor\bin。
- Linux/macOS:把输出路径加到
~/.zshrc或~/.bash_profile末尾,例如export PATH="$(composer global config bin-dir --absolute):$PATH" - Windows:在「系统属性 → 高级 → 环境变量」里,把该路径(如
%APPDATA%\Composer\vendor\bin)添加到「用户变量」的Path中 - 改完必须新开终端;VS Code 要完全退出再重开,否则不继承新
PATH
PATH 加了还是 command not found
常见原因不是配置漏了,而是验证方式或权限出了问题。
先运行 where composer(Windows)或 which composer(macOS/Linux)看是否返回路径;如果空白,说明 PATH 没生效。
- 检查是否加到了「用户变量」却在「系统变量」里找——两个位置的
Path是独立的 - 路径字符串末尾不能有多余空格、中文、反斜杠(如
C:\Users\Me\AppData\Roaming\Composer\vendor\bin\就会失效) - Linux/macOS 下确认
bin目录里的文件有执行权限:ls -l ~/.config/composer/vendor/bin/,若没有x位,运行chmod +x ~/.config/composer/vendor/bin/* - PowerShell 可能因执行策略阻止本地脚本:临时运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
装了包但命令压根没生成
不是所有 Composer 包都提供全局命令,关键看它有没有声明 bin 字段。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
例如 phpstan/phpstan 有 "bin": ["phpstan"],装完就有 phpstan 命令;但 monolog/monolog 是纯库,没 bin,global require 后什么也不会出现在 bin 目录里。
- 查源码最准:打开包的
composer.json,搜索"bin"字段 - 装完后直接进
bin目录看文件是否存在:ls $(composer global config bin-dir --absolute) - 有些包(如
laravel/installer)生成的是laravel.bat(Windows)或laravel(Unix),名字不一定和包名完全一致
COMPOSER_HOME 被覆盖导致路径错乱
如果你设过 COMPOSER_HOME 环境变量,它会彻底接管全局配置和 bin 目录位置——设错一个字符,global require 就会把命令装到错误目录,PATH 再对也白搭。
验证方式:composer config --list --global,看顶部显示的 “Global configuration file” 是否是你预期的路径。
-
COMPOSER_HOME必须是绝对路径,不能含~、$HOME、%USERPROFILE% - 设完要重启终端,否则 shell 还读旧值
- Linux/macOS 下建议优先用
export COMPOSER_HOME="$HOME/.config/composer"(匹配新版默认),而不是硬编码路径
最容易被忽略的是:bin 目录路径和 COMPOSER_HOME 是两套逻辑,前者决定命令放哪,后者决定配置和缓存放哪。改其中一个,另一个未必同步变;PATH 加得再准,命令没生成或生成到别处,照样找不到。










