COMPOSER_HOME路径错误会导致镜像配置写入错误目录而完全失效;必须用绝对路径,通过composer config --list --global和echo $COMPOSER_HOME(Linux/macOS)或echo %COMPOSER_HOME%(Windows)验证是否指向预期目录且config.json存在。

COMPOSER_HOME 路径错误会导致镜像配置完全失效
镜像配置写进 config.json 后仍不生效?先查 COMPOSER_HOME 是否指向了你预期的目录。这个变量决定全局配置文件位置,一旦设错(比如用了 ~/.composer 或 %APPDATA%\Composer 但实际路径是 C:\Users\Alice\AppData\Roaming\Composer),composer config -g repo.packagist 就会写到一个你根本没注意的目录里。
-
COMPOSER_HOME必须是绝对路径,不能含~、$HOME、%USERPROFILE% - Windows 下常见错误:设成
%APPDATA%\Composer→ 实际应展开为完整路径C:\Users\Alice\AppData\Roaming\Composer - 验证方式:运行
composer config --list --global,看 “Global configuration file” 行是否匹配你期望的路径 - Linux/macOS 下用
echo $COMPOSER_HOME检查值,再确认该路径下是否存在config.json
PATH 中漏掉 vendor/bin 就算镜像配对也找不到全局命令
镜像源配置成功,composer global require laravel/installer 也跑完了,但敲 laravel 还是报“不是内部或外部命令”——问题不在镜像,而在 PATH 没包含 COMPOSER_HOME/vendor/bin。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 很多人把
C:\ProgramData\ComposerSetup\bin加进 PATH,这是 composer 自身启动器的位置,和全局命令无关 - 真正要加的是
%COMPOSER_HOME%\vendor\bin(Windows)或$COMPOSER_HOME/vendor/bin(Linux/macOS) - 加完必须新开终端,
echo %PATH%或echo $PATH确认该路径已存在 - 运行
where laravel(Windows)或which laravel(macOS/Linux)验证是否命中
CI/宝塔/计划任务里镜像不生效,本质是用户权限隔离
你在自己账户下配好镜像,composer install 正常;但宝塔后台、crontab 或 GitHub Actions 里却直连官方源、超时失败——这不是镜像失效,是不同用户读不到同一份 config.json。
- 全局配置只对当前 Windows 用户有效,
%APPDATA%\Composer\config.json对 www 用户不可见 - CI 流水线默认以非登录用户执行,
COMPOSER_HOME可能为空或指向临时目录 - 更可靠的做法:进项目根目录,运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不带-g),把镜像写进composer.json的repositories字段 - Git 跟踪该修改后,任何环境、任何用户执行
composer install都会自动用这个镜像
镜像配置被覆盖的隐性场景:PHP CLI 和 Web SAPI 使用不同 php.ini
你确认 composer config -g 写入成功,composer install 却仍卡在 “Loading composer repositories…”——可能 PHP CLI 加载了错误的 php.ini,导致 Composer 启动时根本没读到全局配置。
- 运行
php --ini查 CLI 实际加载的配置路径,不是 Apache/Nginx 的php.ini - 某些一键包(如宝塔)会为 CLI 单独建
php-cli.ini,而你改的是 Web 版本 - 如果 CLI 的
php.ini关闭了openssl或curl,Composer 连镜像服务器都连不上,自然回退到官方源并超时 - 验证:在 CLI 下运行
php -r "print_r(get_cfg_var('include_path'));",确认它没意外加载其他配置

















