Composer只认COMPOSER_HOME、COMPOSER_CACHE_DIR等硬编码英文环境变量,路径严禁含中文、~或$HOME;COMPOSER_HOME必须为绝对路径,设错导致global命令静默失效且不报错;PATH须包含$COMPOSER_HOME/vendor/bin(Linux/macOS)或%COMPOSER_HOME%\vendor\bin(Windows),设完必须新开终端验证。

Composer 没有“中文环境变量”这回事——它只认 COMPOSER_HOME、COMPOSER_CACHE_DIR 这类硬编码前缀的英文环境变量,路径里也不能含中文字符。设错一个斜杠或混进中文目录,composer global require 安装的命令(比如 laravel)会静默放进错误位置,后续执行直接报 command not found 或跳过 autoload,且不提示原因。
COMPOSER_HOME 必须是绝对路径,且不能含中文、~、$HOME、%USERPROFILE%
这个变量决定全局配置、缓存、vendor/bin 的根目录。一旦路径含中文(如 C:\用户\name\.composer)或用了 shell 变量(如 ~/composer),Composer 就会拒绝识别,但不会报错,只会退回到默认路径(%APPDATA%\Composer 或 $HOME/.composer),导致你设的值完全失效。
- Windows 正确写法:
setx COMPOSER_HOME "C:\Users\YourName\AppData\Roaming\Composer"(注意:必须用英文路径,不能写C:\用户\...) - macOS/Linux 正确写法:
export COMPOSER_HOME="/Users/yourname/.my-composer"(不能写~/my-composer或$HOME/.composer) - 设完必须新开终端(
source ~/.zshrc不够,子进程不继承) - 验证方式:
composer config --list --global,看 “Global configuration file” 行是否匹配你设的路径
PATH 必须包含 $COMPOSER_HOME/vendor/bin(macOS/Linux)或 %COMPOSER_HOME%\vendor\bin(Windows)
很多人以为 composer global require laravel/installer 成功后就能敲 laravel,其实 Composer 只负责把可执行文件放进 vendor/bin,从不碰系统 PATH。加错路径,命令就永远找不到。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- macOS/Linux:在
~/.zshrc末尾加export PATH="$COMPOSER_HOME/vendor/bin:$PATH"(顺序很重要,放前面防覆盖) - Windows:把
%COMPOSER_HOME%\vendor\bin加进「系统属性 → 高级 → 环境变量 → 系统变量 → Path」,不是%APPDATA%\Composer\vendor\bin(除非你根本没设COMPOSER_HOME) - 加完必须新开 CMD/PowerShell/终端,运行
echo %PATH%或echo $PATH确认路径存在 - 再用
where laravel(Windows)或which laravel(macOS/Linux)确认指向vendor/bin下的文件
Windows 下 composer.bat 包装器比直接调用 php composer.phar 更可靠
直接运行 php composer.phar 在 Windows 上极易卡住或报错,常见原因是 PHP CLI 版本不一致、ext-zip 未启用、或找不到 php.ini。官方安装包自带的 composer.bat 会自动探测可用 PHP 并设置必要环境变量。
- 如果你手动下载了
composer.phar,建议在同一目录建composer.bat:@echo off<br>php "%~dp0composer.phar" %*
- 确保这个
.bat文件所在目录已加入 PATH(不是composer.phar路径) - 多个 PHP 共存时,
where php查路径顺序,把想用的 PHP 目录移到 PATH 最前面;或在.bat中硬编码路径,如:C:\php82\php.exe "%~dp0composer.phar" %*
哪些 config 项真能全局生效?别被 --global 假象骗了
composer config --global 不等于所有选项都全局生效。有些只在项目有 composer.json 且未显式覆盖时才继承,空目录下运行 composer require 时压根不读。
- 真正稳定全局生效的:
github-oauth、http-basic、process-timeout、repo.packagist(镜像源) - 容易误以为全局生效但实际受限的:
minimum-stability、prefer-stable、platform—— 它们只影响当前项目composer.json里没写对应字段时的行为 - 查看当前生效值:
composer config --list --global和composer config --list对比,带(global)标记的才是全局设
最常被忽略的点:所有配置必须通过命令写入,禁止手改 config.json;设完环境变量后必须新开终端,旧窗口缓存旧值;Windows 下系统变量比用户变量更稳定,尤其对 IDE 和 CI 工具生效。

















