composer全局配置需严格遵循键名规范、路径权限与缓存清理:如镜像源必须用repositories.packagist.org.url,cache-dir须绝对路径,认证凭据应写入auth.json并设600权限,改完需composer clear-cache并确认--global作用域。

composer config --global 写错参数名就白改
Composer 全局配置不是“设了就生效”,很多键名看起来合理,但实际不被识别。比如 repo.packagist 是旧版写法,2.x 已废弃;repos.packagist 缺少 .org 后缀,也会静默失效。
真正有效的镜像源键名是:repositories.packagist.org.url(注意复数 repositories、带 .org、结尾是 .url)。
-
cache-dir:必须用绝对路径,不能含~或$HOME -
process-timeout:设为0不等于禁用,建议设600 -
github-oauth.github.com:GitHub token 必须走这个键,http-basic无效 -
http-proxy和https-proxy:值格式为http://user:pass@host:port,含特殊字符需用双引号包裹 -
--unset可安全删除某项,比如composer config --global --unset http-proxy
私有仓库添加必须用 --add,否则不进数组
直接 composer config --global repositories.myrepo '{"type":"composer","url":"https://my.repo/"}' 会尝试赋值给对象字段,但 repositories 要求是数组结构——结果要么报错,要么静默失败。
正确做法是显式加 --add,让 Composer 把它作为新元素追加进 repositories 数组:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
composer config --global --add repositories.myrepo '{"type":"composer","url":"https://my.repo/api/"}'- URL 值必须是合法 JSON 字符串,单引号包裹,内部双引号保留
- 如果已有同名仓库,
--add会新增一条,不会覆盖 - 改完立刻验证:
composer config --global repositories,确认输出是数组而非对象
auth.json 才是认证凭据的唯一可信位置
composer config --global http-basic.my.repo user pass 看似方便,但它只写进 ~/.composer/config.json 的 config.http-basic 字段——而 Composer 实际读取凭据的优先级是:auth.json > config.json 中的 config.http-basic。所以这条命令基本无效,还把密码明文塞进配置文件里。
- 正确方式是让 Composer 自动写入
auth.json:composer config --global http-basic.my.repo user pass(这行命令其实会自动更新auth.json,前提是没手动破坏权限) - 手动编辑时,
auth.json必须放在~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows) - 文件权限必须是
600:chmod 600 ~/.composer/auth.json,否则 Composer 拒绝读取 - GitHub token 用
github-oauth.github.com,GitLab token 用gitlab-token.gitlab.example.com,不能混用
改完不生效?先清缓存再查作用域
改了全局配置却没效果,大概率是缓存没清,或者根本没改对地方。Composer 的全局配置只影响全局命令行为(如 composer create-project),不强制覆盖项目级依赖安装逻辑——项目里仍以自己的 composer.json 和 composer.lock 为准。
- 执行
composer clear-cache,尤其换镜像后,否则旧索引还在本地缓存里 - 确认是否真用了
--global(或简写-g),漏掉就写进当前项目composer.json了 - 查真实生效路径:
composer config --global --list第一行显示home路径,所有全局配置都在那里的config.json里 - 某些配置项(如
minimum-stability)只在空目录下兜底生效,一旦项目有composer.json就被忽略
全局配置不是魔法开关,它只对特定键生效,且依赖路径、键名、权限、缓存四者全部到位。少一个环节,就卡在“我以为改好了”上。










