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

composer config 命令必须用,手改 composer.json 无效
很多人改完 composer.json 里的 config 字段,发现 sort-packages 没生效、github-oauth 还是弹登录框——根本原因是 Composer 只认 composer config 命令写入的配置,手改 JSON 不触发校验和加载逻辑。
常见错误包括:
- 把
config嵌套在require或extra里,结果被完全忽略 - 键名拼错,比如写成
sort_packages(正确是sort-packages) - 值类型不对,如
process-timeout写成字符串"300"而不是整数300
项目级配置直接运行:composer config sort-packages true;全局配置加 -g:composer config -g process-timeout 600。改完不重启、不重装,下次 composer install 或 composer update 就自动应用。
镜像源配置键名是 repos.packagist,不是 repo.packagist
2022 年起 Composer 2.2+ 已废弃 repo.packagist 键名,现在必须用 repos.packagist(带 s),且值必须是完整对象格式。
正确写法:composer config -g repos.packagist '{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}'
容易踩的坑:
- 漏掉单引号包裹整个 JSON 字符串,shell 会把花括号和空格当语法分隔符
- URL 缺末尾斜杠
/,某些版本拼接packages.json时出错 - 用了
http://协议,Composer 2.2+ 默认拒绝非 HTTPS 源 - 没清缓存,旧的
packages.json还在~/.composer/cache/里,换源后仍连官方地址
验证是否生效:composer config -g repos.packagist 应输出完整对象,不是字符串 URL。
凭据类配置(如 github-oauth)只能全局设,项目级无效
github-oauth、http-basic、gitlab-domains 这类认证配置,Composer 只从全局配置读取,写进项目 composer.json 的 config 字段完全不起作用。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
否则会出现:每次 composer install 都卡在 GitHub 认证提示,或私有包 401 报错。
正确操作:
- GitHub Token:
composer config -g github-oauth.github.com "your_token_here"(值必须加引号,防空格截断) - 私有仓库 HTTP 认证:
composer config -g http-basic.repo.example.com username password - GitLab 白名单:
composer config -g gitlab-domains '["gitlab.internal.company"]'(单引号包裹 JSON 数组)
切记别把密码 commit 到 Git —— 项目级配置不仅无效,还会泄露敏感信息。
vendor-dir 和 bin-dir 改了不会自动迁移文件
composer config vendor-dir 或 bin-dir 改路径后,Composer 不会把已有的 vendor/ 或可执行文件搬过去,它只影响后续命令行为。
后果是:composer install 会新建目录,但老 vendor/ 还在原处,autoload.php 路径失效,require 报错 Class not found。
安全做法:
- 先删掉旧
vendor/和composer.lock - 再运行
composer install,让新路径下重新拉取和生成 - 如果用了
bin-dir,确认composer.json的bin字段或包的bin声明存在,否则vendor/bin/下没可执行文件
特别注意:composer global require 安装的命令(如 laravel)默认放在 ~/.composer/vendor/bin,这个路径由 COMPOSER_HOME 决定,和项目级 bin-dir 无关。










