运行composer config --global --list --verbose可确认当前生效的全局配置路径,首行即显示实际加载的config.json文件位置,优先使用$COMPOSER_HOME环境变量指向路径,否则为默认路径。

全局配置必须用 composer config --global 修改,手动编辑 config.json 极易因 JSON 格式错误导致后续所有 Composer 命令失败。
怎么确认当前生效的全局配置路径
Composer 不一定读你想象中的那个 config.json。它优先使用 $COMPOSER_HOME 环境变量指向的目录,新版默认是 ~/.config/composer/config.json(Linux/macOS)或 %APPDATA%\Composer\config.json(Windows),但如果你设了 COMPOSER_HOME,就会用那个路径。
运行这条命令才能看到真实路径和内容:
composer config --global --list --verbose
输出第一行就是实际加载的文件位置。常见坑包括:
- 同时存在
~/.composer/config.json和~/.config/composer/config.json,Composer 只读后者,前者被静默忽略 - 在 Git Bash 里执行
composer config --global,%APPDATA%不展开,结果写入空目录或失败却不报错 - 改完没生效,其实是路径对但文件权限不足,写入失败后仍为空配置
镜像源设置为什么总不生效
国内用户最常卡在这步:设了阿里云/腾讯云镜像,composer install 还是慢或报错。核心原因就三个:
- 键名必须是
repos.packagist(复数repos),不是repo.packagist—— 旧文档写法已废弃,拼错就无效 - 值必须是完整对象格式,且强制 HTTPS:
composer config --global repos.packagist '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}' - 设完不运行
composer clear-cache,旧缓存里的包索引还在,新镜像根本没机会用上
恢复官方源只需:
composer config --global --unset repos.packagist
注意:这个操作不会删掉其他私有仓库配置,只清 Packagist 相关项。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
哪些配置适合 global,哪些必须写进项目
全局配置不是“所有配置都扔进去”,它是环境级设定,和具体项目无关。混淆会导致协作灾难。
应该 global 的:
-
github-oauth.github.com:避免 GitHub API 限流,token 属机器环境,不是项目契约 -
cache-dir:指定 SSD 外挂盘路径,减少磨损 -
store-auths:统一控制是否保存私仓密码(默认true)
绝不能 global 的:
-
autoload、require、scripts:这些定义项目行为,写全局会污染所有项目 -
minimum-stability、prefer-stable:影响依赖解析策略,团队必须显式声明在composer.json中 -
config.platform:模拟目标运行环境 PHP 版本,属于部署契约,不能跨项目共享
项目级 config 字段会**完全合并覆盖**全局同名项,不是叠加。比如全局设了 bin-dir 为 bin,项目里写了 "bin-dir": "vendor/bin",最终生效的就是后者。
改完配置后 install 还报错?先查这三件事
配置变更不会自动重装已有依赖,也不会刷新已加载的缓存状态。遇到问题别急着重装 Composer:
- 执行
composer diagnose,它会检查配置路径、HTTPS 设置、CA 证书等底层依赖,比看报错更早发现问题 - 运行
composer config --global --list,确认你要的键确实存在、拼写正确、值符合预期(比如secure-http是true还是false) - 如果涉及私有仓库认证,确保用了
http-basic.repo.example.com格式,并且用户名密码没漏掉特殊字符(需加引号包裹)
最常被忽略的一点:某些配置(如 process-timeout)只在命令启动时读取一次,改完得重启终端或重新触发命令,而不是“改完就立刻作用于正在运行的 install 进程”。










