composer_home必须为绝对路径,否则全局配置静默失效;含~、$home、%userprofile%或中文时自动回退默认路径;path须手动添加$composer_home/vendor/bin,验证需用composer global config --list --verbose确认实际加载文件。

COMPOSER_HOME 必须是绝对路径,否则全局配置静默失效
Composer 不会报错,但只要 COMPOSER_HOME 里含 ~、$HOME、%USERPROFILE% 或中文路径,它就自动退回到默认位置($HOME/.composer 或 %APPDATA%\Composer),你改的镜像、OAuth、bin-dir 全部不生效。
Linux/macOS 正确写法:export COMPOSER_HOME="/home/you/.my-composer"(不能用 ~/my-composer)
Windows 正确写法:setx COMPOSER_HOME "C:\Users\You\AppData\Roaming\Composer"(引号内不能有空格,也不能用 C:\用户\)
设完必须新开终端——source ~/.zshrc 没用,子 shell 不继承父进程环境变量。
验证方式:composer config --list --global,看 “Global configuration file” 行是否匹配你设的路径。
PATH 里没加 vendor/bin,全局命令永远找不到
Composer 从不自动把全局 bin 目录加进 PATH。它只负责把 laravel、phpunit 这类可执行文件放进 $COMPOSER_HOME/vendor/bin,剩下的全靠你自己配。
- Linux/macOS:在
~/.zshrc末尾加export PATH="$COMPOSER_HOME/vendor/bin:$PATH"(顺序很重要,放前面防系统同名命令覆盖) - Windows:把
%COMPOSER_HOME%\vendor\bin加进「系统属性 → 高级 → 环境变量 → 用户变量 → Path」 - 加完必须新开终端,再运行
echo $PATH(macOS/Linux)或echo %PATH%(Windows)确认路径存在 - 最后用
which laravel(macOS/Linux)或where phpunit(Windows)确认指向的是vendor/bin下的文件
验证配置是否真生效,别信 composer config --global
composer config --global repo.packagist 只显示你上次写入的值,不校验格式、不检查是否被环境变量覆盖、也不反映当前 CLI 实际加载的配置路径。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
真正可信的验证起点是:composer global config --list --verbose,首行 Loaded config file: 显示的路径,才是此刻 Composer 正在读的那个文件。
常见陷阱包括:
– 用 sudo composer global config 写入了 /root/.composer/config.json,但日常是普通用户,根本读不到
– COMPOSER_HOME 指向空目录或权限不足,输出里压根没有 Loaded config file 行
– Windows Git Bash 里 %APPDATA% 不展开,可能显示空路径;换 PowerShell 或 CMD 重试
改了镜像却还在连 packagist.org?缓存没清干净
改完 repos.packagist.org.url 后立刻跑 composer install,大概率还是卡在 Loading composer repositories——因为旧缓存里的 packages.json 快照还在,Composer 根本没去新镜像拉数据。
必须执行:composer clear-cache,不是“建议”,是硬性前置步骤。
验证是否清成功:ls -la $(composer diag | grep "Cache directory" | cut -d' ' -f3) 应为空或只含元数据目录。
额外注意:
– 如果公司有私有源,配 repos.packages 时漏掉 "packagist.org": false,Composer 仍会并行请求官方源,拖慢整体速度
– composer validate 通过 ≠ 配置能用,它只校验 JSON 语法和字段名拼写,不检查镜像地址是否可达、PHP 版本是否匹配
最常被忽略的点:改完 COMPOSER_HOME 或 PATH 后没重启终端,或者改的是用户级变量却在系统级终端(如 Windows 的 PowerShell vs CMD)里测试——它们的环境变量缓存是分开的。










