Composer全局命令失效主因是COMPOSER_HOME路径错误或%APPDATA%\Composer\vendor\bin未加入PATH,两者缺一不可;设完必须重启终端,并用composer config --list --global和echo %PATH%验证。

Composer 全局命令失效,90% 是因为 COMPOSER_HOME 路径错误或 %APPDATA%\Composer\vendor\bin 没加进系统 PATH —— 两者缺一不可,且必须重启终端验证。
为什么 composer global require 成功了却找不到命令
Composer 只负责把可执行脚本(比如 think、laravel)放进 $COMPOSER_HOME\vendor\bin,它从不修改系统环境变量。你看到 “Successfully installed” 并不等于命令能直接调用。
-
composer global require topthink/think-cli后,think文件实际落在C:\Users\YourName\AppData\Roaming\Composer\vendor\bin\think.bat(Windows)或对应路径下 - 如果该目录没加进
PATH,CMD/PowerShell 就根本搜不到这个文件,报错是 “不是内部或外部命令” - 常见误操作:只加了
%APPDATA%\Composer,漏掉后面的\vendor\bin - 验证方式:新开终端,运行
echo %PATH%,搜索是否含Composer\vendor\bin;再运行where think看能否定位到 .bat 文件
COMPOSER_HOME 设错会导致全局配置“写对了但没生效”
这个环境变量不是可选项,而是 Composer 查找全局配置的唯一入口。它写错一个字符,所有 composer config --global 写入的内容都会被存到错误位置,后续读取全失败。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- Windows 必须用绝对路径,如
C:\Users\YourName\AppData\Roaming\Composer;不能写%APPDATA%\Composer(PowerShell 会展开,Git Bash 不会,Composer 自己不解析) - Linux/macOS 必须用
/home/yourname/.composer这类绝对路径,~/.composer或$HOME/.composer会被静默忽略 - 设完必须关闭所有已打开的终端,重新启动 CMD/PowerShell,否则进程仍读旧环境值
- 唯一验证方式:
composer config --list --global,第一行 “Global configuration file” 显示的路径必须和你设的COMPOSER_HOME完全一致
哪些 composer config --global 配置项真能跨项目生效
不是所有配置都支持全局作用域。Composer 对不同字段的加载逻辑完全不同,混淆会导致“明明写了却没用”。
- 真正稳定全局生效的:
github-oauth、http-basic、process-timeout、secure-http、cache-dir—— 这些控制网络、认证、缓存等底层行为,项目无法覆盖 - 看似全局、实则受限的:
minimum-stability、prefer-stable、platform—— 只在当前目录没有composer.json时才读全局值;一旦项目里写了同名字段,就立刻被覆盖 - 完全无效的:
autoload、require、scripts—— 这些根本不支持全局配置,设了也会被静默丢弃 - 验证是否写对:
composer config --global --list输出中带(global)标记的才是成功写入的项
Windows 下还要额外检查 PHP 可执行文件类型
Composer 的 .bat 脚本依赖标准输出流,如果系统 PATH 中的 php 指向的是 php-win.exe(GUI 模式),命令会静默卡住、无任何报错,看起来就像“命令无效”。
- 运行
where php,确认返回的是C:\php\php.exe而非php-win.exe - 如果返回的是
php-win.exe,说明 PHP 安装时勾选了 GUI 版本 PATH;需手动删掉该路径,改为指向含php.exe的目录(如C:\php) - 验证:运行
php -v应正常输出版本号,且不弹窗
最常被跳过的一步是:改完 COMPOSER_HOME 或 PATH 后没关掉所有终端重开——旧进程不会自动 reload 环境变量,所有验证都白做。

















