composer 2.x 镜像配置需严格满足三要素:键名repo.packagist(单数)、中间composer为必填type值、url必须https且以/结尾,缺一即静默失效;验证须用composer config -g repo.packagist输出json或url,再结合composer show -vvv | grep downloading确认真实请求域名。

composer config -g repo.packagist 命令写错就静默失效
配了镜像但还是卡在 Downloading...,八成是这条命令根本没生效。Composer 2.x 对键名、type 值、URL 格式三者要求极严,错一个字符就当没这回事——不报错、不提示、照连 packagist.org。
-
repo.packagist不能写成repos.packagist(多一个s就无效) - 中间的
composer是 type 值,漏掉它会 fallback 到默认源 - URL 必须是 HTTPS 且以
/结尾:https://mirrors.aliyun.com/composer/✅,少斜杠会拼接出错返回 404 - 执行后必须验证:
composer config -g repo.packagist输出应为完整 URL 或{"type": "composer", "url": "..."},空、null或仍显示packagist.org说明失败
项目级配置比全局更可靠,尤其 CI/CD 场景下
全局配置看似省事,但在 Docker 构建、宝塔面板或多人协作时极易被覆盖或权限干扰。项目级配置直接写进 composer.json,拉代码即用,行为一致。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进入项目根目录,运行:
composer config repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/(注意不加-g) - 该命令自动向
repositories数组追加packagist条目,不覆盖已有私有源 - 若项目已有
"repositories": {},别手动编辑 JSON——格式错一个逗号就会让composer install报错 - CI 构建时,容器每次启动都读取最新
composer.json,无需额外 setup 步骤
换源后仍卡住?先清缓存再重装 vendor 和 lock
镜像只加速下载,但旧缓存里存着 packagist.org 的元数据,Composer 会优先读缓存并尝试从旧地址校验,结果就是卡在 DNS 或 TLS 握手——不是没走镜像,是根本没发请求过去。
- 必须执行:
composer clear-cache - 删掉
vendor/和composer.lock - 再跑:
composer install --no-cache(禁用缓存强制走新源) - 别试图保留旧
composer.lock——它记录的是旧源的包哈希,和镜像返回的元数据不兼容,必然报hash does not match
验证是否真走镜像,不能只看 config 输出
光跑 composer config -g repo.packagist 显示 URL 没用,得看到网络请求实际打到镜像域名才算数。
- 实测命令:
composer show monolog/monolog -vvv 2>&1 | grep "Downloading" - 日志里必须出现
mirrors.aliyun.com、mirrors.tuna.tsinghua.edu.cn等镜像域名 - 如果看到
https://packagist.org或repo.packagist.org,说明 fallback 触发了,配置没起作用 - 注意:Composer 2.2+ 默认开启官方源回退机制,镜像返回 404 或 503 时会自动切回
packagist.org查一次,这是防同步延迟的保险丝,别轻易关掉










