Composer config -g repo.packagist 不生效是因为三个硬性条件未同时满足:键名必须为单数 repo.packagist、中间必须显式指定 type 值 composer、URL 必须 HTTPS 且末尾带 /;任一缺失即静默回退官方源,验证需输出完整 JSON 对象。

composer config -g repo.packagist 命令为什么总不生效
它不报错,但根本没写进配置——90% 的失败只因三个硬性条件漏掉一个:repo.packagist 键名必须是单数(不是 repos.packagist 或 repositories.packagist),中间那个 composer 是必需的 type 值(不能省略),URL 必须是 HTTPS 且末尾带斜杠(https://mirrors.aliyun.com/composer/ ✅,https://mirrors.aliyun.com/composer ❌)。
验证是否真写进去了:运行 composer config -g repo.packagist。输出必须是完整 JSON 对象,比如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};空、null、或仍是 https://packagist.org,说明没写对。
项目级配置覆盖全局后私有源丢失
只要 composer.json 里存在 repositories 字段(哪怕只是 "repositories": {}),全局镜像配置就彻底失效——不是优先级低,是直接跳过。
-
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g)会全量替换整个repositories字段,把你原有的私有 Git 源或 Satis 源清空 - 安全做法是手动编辑
composer.json:确保repositories是数组,首位放{"packagist.org": false},第二位才是镜像源,其余私有源按需追加 - 改完必须删掉
vendor/和composer.lock,再跑composer install(不是update),否则仍走旧源
Composer 2.2+ 镜像配置键名和结构变了
新版不再推荐用 repo.packagist,而是要求用 repositories.packagist.org 或标准 repositories 数组格式。写错就静默忽略,composer install 还卡在 packagist.org 域名解析。
正确写法有两种:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"repositories.packagist.org": {"url": "https://mirrors.aliyun.com/composer/", "type": "composer"}(顶层键,非嵌套) -
"repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}](数组形式,注意是方括号)
两者不能混用;若项目已有 repositories 数组,就别再设 repositories.packagist.org,否则可能被忽略。
宝塔、CI、Docker 里镜像不生效的根本原因
你在终端用 root 执行了 composer config -g,但宝塔「一键部署」实际以 www 用户运行,读的是 /home/www/.composer/config.json,根本看不到你的配置。
查实际执行用户的方法:
- 宝塔任务日志里看 UID 或运行
whoami - CI 脚本中避免混用
sudo和普通用户命令 - 最稳的方式是不用全局配置:在 CI 步骤里直接加
--repository-url=https://mirrors.aliyun.com/composer/参数
镜像本身没问题,问题永远出在「谁写的配置」和「谁在跑命令」不一致。

















