config 选项必须用 composer config 命令写入,手改 json 无效;项目级配 composer.json 根级 config 字段,全局级必加 --global;键名错、位置错、非官方键均不生效。

直接说结论:config 选项必须用 composer config 命令写入,不能手改 JSON;项目级写进 composer.json 根级 config 字段,全局级必须加 --global(或 -g),写错位置或键名就等于没配。
config 键名写错或放错位置,配置完全不生效
常见错误现象:composer install 还走官方源、github-oauth 设了但依然限流、sort-packages 开了却没重排依赖列表。
-
config字段只能出现在composer.json最外层,塞进require、scripts或extra里会被 Composer 忽略 - 所有键名必须是 官方文档明确定义的,比如
sort-packages合法,my-custom-flag写进去也不报错,但毫无作用 - 嵌套对象只允许特定字段,如
github-oauth下可写{"github.com": "token"},但{"foo": {"bar": true}}这种自定义结构会被整个跳过 - 修改后必须运行
composer install或composer update才会应用——它不控制 config 读取本身,而是影响后续命令行为
哪些 config 必须用 --global?凭据类配置不支持项目级
像 GitHub、GitLab、私有仓库的认证信息,Composer 只从全局配置读取,项目级 config 字段里写 github-oauth 或 http-basic 是无效的。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法:
composer config --global github-oauth.github.com "your_token"(值带引号防空格截断) - 私有仓库 HTTP 认证:
composer config --global http-basic.repo.example.com username password - GitLab 域名白名单:
composer config --global gitlab-domains '["gitlab.internal.company"]'(注意单引号包裹 JSON 数组) - 误用项目级会导致每次
composer install都卡在 auth 提示,且 commit 到 Git 会泄露密码
镜像源配置别混淆 repo.packagist 和 repos.packagist
这是国内用户最常踩的坑:键名拼错、协议写错、没清缓存,导致“明明设了却没加速”。
- 全局镜像必须用
composer config --global repos.packagist(不是repo.packagist),旧文档里的repo.packagist已废弃 - 值必须是对象格式:
composer config --global repos.packagist '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}' - HTTPS 是强制的,
http://地址会被 Composer 2.2+ 拒绝,必须写https:// - 改完立刻执行
composer clear-cache,否则旧包索引可能还在缓存里,看起来“没生效”
vendor-dir、bin-dir 改了不会自动迁移文件
这两个路径配置只是告诉 Composer “下次装到哪”,不会移动已有内容,容易引发 autoload 失败或命令找不到。
- 先删掉旧
vendor/和bin/目录(确认没有自定义脚本硬编码引用它们) - 再运行
composer config vendor-dir "third-party"(项目级)或composer config --global vendor-dir "/shared/vendor"(全局级) - 最后跑
composer install,新文件才会落到目标路径 - Laravel 等框架若手动引入了
vendor/autoload.php,路径变更后需同步更新引用语句
最常被忽略的一点是:config 不是“开关式配置”,它只在命令执行时参与决策。比如 process-timeout 影响的是 composer install 的超时判断,而不是 config 加载过程本身;platform 伪造 PHP 版本只改变依赖解析结果,不改变实际运行环境——这两类行为差异,不看日志或 composer why-not 很难察觉。










