Composer换源必须严格配置repo.packagist为单数小写、type显式写composer、URL以https://开头且结尾带/,否则静默回退官方源;并发下载需设http-max-concurrent-downloads(非parallel-downloads),推荐8-10;项目级配置优于全局,换源后须清缓存、删vendor和lock并重装。

composer config -g repo.packagist 命令必须严格配对
配了镜像但 composer install 还卡在 Loading composer repositories,八成是这条命令根本没生效。Composer 2.x 对三个要素零容忍:键名必须是 repo.packagist(单数、小写),第二个参数必须显式写 composer(这是 type 声明,不是可选),URL 必须以 https:// 开头且末尾带 /。
常见错误:repos.packagist(多一个 s)、漏掉 composer、URL 写成 https://mirrors.aliyun.com/composer(少斜杠)。这些都会静默回退到官方源,不报错也不提示。
验证是否写入成功:composer config -g repo.packagist 输出必须是完整 URL 字符串或 JSON 对象,如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null 或仍显示 https://packagist.org,说明配置失败。
并发下载必须用 http-max-concurrent-downloads
parallel-downloads 在 Composer 2.2+ 已被弃用,设了也不生效——这是最常踩的坑。真正起作用的是 http-max-concurrent-downloads,推荐值为 8 或 10,别超过 12,否则可能触发镜像限流或本地 DNS 超时。
启用方式:composer config -g http-max-concurrent-downloads 10。该设置只对 composer install 有效;composer update 仍需串行解析依赖图,镜像和并发都救不了它。
某些企业网络对高并发敏感,若出现 file_get_contents(): SSL operation failed,降到 6 或 8 即可。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
项目级配置比全局更可靠,尤其在 CI/Docker 中
全局配置 composer config -g 写入当前用户的 ~/.composer/config.json,但在宝塔(www 用户)、CI 流水线(runner 用户)、Docker(www-data 或自定义用户)中,实际执行用户读不到你的个人配置。
更稳的做法是进项目根目录后运行:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加 -g)。它会自动向 composer.json 的 repositories 字段追加 "packagist" 条目,不覆盖已有私有源。
注意:"repositories": {} 会被转为标准数组格式插入;"repositories": [] 则追加到末尾。改完务必运行 composer update --lock,让 composer.lock 记录新源地址。
换源后仍慢?先清缓存再重装 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 show monolog/monolog -vvv 2>&1 | grep "Downloading",日志里必须出现 mirrors.aliyun.com 或类似镜像域名才算数。

















