composer config -g repo.packagist 不生效是因为键名必须为单数 repo.packagist、中间必须显式指定 type 值 composer、URL 必须 HTTPS 且末尾带斜杠,三者缺一即静默回退官方源;验证需输出完整 JSON 对象。

镜像配置写错,超时参数调再高也没用——90% 的 Composer 超时问题,根源在 composer config -g repo.packagist 命令本身没生效。
为什么 composer config -g repo.packagist 总是不生效
这条命令静默失败率极高:不报错、不提示、看似执行成功,实际根本没写进全局配置。Composer 2.0+ 对字段名、type 值、URL 格式三者做硬校验,任一出错就自动 fallback 到 https://packagist.org。
-
repo.packagist必须是单数;写成repos.packagist或repositories.packagist.org全部无效 - 中间的
composer是type值,不可省略;漏掉它,composer diagnose会报Repo is not configured properly - URL 必须以
https://开头,且末尾带斜杠:https://mirrors.tuna.tsinghua.edu.cn/composer/✅,https://mirrors.tuna.tsinghua.edu.cn/composer❌(少斜杠会导致请求拼成/composer/packages.json直接 404) - 验证是否真落地:运行
composer config -g repo.packagist,输出必须是完整 JSON 对象,例如{"type": "composer", "url": "https://mirrors.tuna.tsinghua.edu.cn/composer/"};若为空、null、或仍是官方地址,说明配置失败
缓存不清理,镜像再快也白搭
Composer 缓存的是元数据文件(如 packages.json、provider-*.json),这些文件一旦生成就不会自动更新——哪怕你刚改完镜像,它仍可能反复向 packagist.org 发起失败请求。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须手动清空:先运行
composer clear-cache - 再删掉本地元数据缓存目录:
rm -rf $(composer config --global cache-dir)/repo/https---mirrors-tuna-tsinghua-edu-cn-composer/(Linux/macOS)
或%LOCALAPPDATA%\Composer\cache\repo\https---mirrors-tuna-tsinghua-edu-cn-composer\(Windows) - CI/CD 构建中建议加一步:
composer clear-cache && rm -rf $(composer config --global cache-dir)/repo/
项目级 repositories 字段会完全覆盖全局镜像
只要项目根目录的 composer.json 中存在 "repositories" 字段(哪怕只是空数组、或只配了一个私有源),Composer 就会无视全局 repo.packagist 配置,直连 packagist.org。
- 检查方法:运行
composer install -vvv | head -n 5,看第一行下载 URL 是否为镜像域名 - 临时验证:在项目根目录运行
composer config --unset repositories,再试安装 - 长期方案:若必须保留私有源,应在
repositories数组里显式加入 packagist 镜像条目:"packagist": { "type": "composer", "url": "https://mirrors.tuna.tsinghua.edu.cn/composer/" },并在顶层加"packagist.org": false
http.timeout 和 process-timeout 必须同步设,但管的事完全不同
这两个参数常被混用,结果调了等于没调:
-
http.timeout控制每次 HTTP 请求全过程(DNS 解析 + TLS 握手 + 首字节等待 + body 下载),默认仅 60 秒;国内镜像首字节延迟波动大,建议设为600:composer config -g http.timeout 600 -
process-timeout控制整个命令生命周期(含解压、post-install-cmd、autoloader 生成等),默认 300 秒;大项目易超,建议设为1200:composer config -g process-timeout 1200 -
http-basic.timeout是 v1 废弃项,v2+ 完全不读;--timeout=600只影响命令总耗时,对 HTTP 下载阶段无效 - CI 环境中,
process-timeout推荐设为0(不限时),尤其首次安装或缓存失效时
真正麻烦的从来不是 timeout 数值本身,而是网络路径中某一段(DNS、TLS、代理、镜像节点)出现非对称延迟——它只在特定包、特定时刻爆发。调参前,先用 curl -v https://mirrors.tuna.tsinghua.edu.cn/composer/packages.json 看卡在哪一环。

















