Composer卡在Downloading的根源是composer.lock中dist.url仍为GitHub原始地址,必须删除vendor和composer.lock后重新install才能更新为镜像URL;同时需正确配置repo.packagist、http-max-concurrent-downloads并优先使用dist包。

Composer 导出(composer install 或 composer update)卡在 Downloading,90% 不是网络差,而是镜像没真正生效——尤其当 composer.lock 里还存着 https://codeload.github.com/ 这类原始地址时,换源根本不起作用。
为什么 composer config -g repo.packagist 总是不生效
这条命令极易静默失败,不报错但实际仍走 https://packagist.org。必须同时满足三个硬条件:
-
repo.packagist是唯一合法键名(写成repos.packagist或packagist.org都会被忽略) - 第二个参数必须显式写
composer(这是仓库类型声明,不是可选值) - URL 必须是 HTTPS 且末尾带
/:比如https://mirrors.aliyun.com/composer/✅,而https://mirrors.aliyun.com/composer❌(少斜杠会导致请求路径拼成/composerpackages.json,直接 404)
验证是否写成功:运行 composer config -g repo.packagist,输出必须是类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON 对象。空、null、或仍是 https://packagist.org,说明根本没写进去。
composer.lock 里的 GitHub 地址不会自动更新
镜像只代理元数据(packages.json),不托管 zip 包;composer.lock 中的 dist.url 字段一旦生成,就固化为原始 GitHub 地址。哪怕你配了阿里云镜像,只要 lock 文件还在,Composer 就照单下载 https://codeload.github.com/。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行
composer install -vvv | grep "Downloading",如果看到https://api.github.com/或https://codeload.github.com/,说明 zip 下载路径没变 - 必须删掉
vendor/和composer.lock - 再跑
composer install,让 Composer 重新拉元数据并生成带镜像域名的新dist.url -
--repository参数对已存在的composer.lock完全无效,它只影响元数据获取环节
并发下载不调等于白配镜像
Composer 2.2+ 默认只并发 3 个连接,严重浪费国内带宽。不调这个参数,换再快的镜像也卡在 Downloading。
- 旧配置
parallel-downloads已弃用,新版只认http-max-concurrent-downloads - 正确命令:
composer config -g http-max-concurrent-downloads 10(推荐 8–10,别超 15) - 搭配
composer config -g prefer-dist true,强制走 dist 包而非 source,进一步减少 Git 操作开销 - CI 环境建议加
--no-dev --prefer-dist --no-autoloader --no-scripts组合提速
项目级配置比全局更可靠
全局配置在宝塔、CI、多用户环境里大概率失效——因为 composer config -g 写的是当前用户的 ~/.composer/config.json,而实际执行命令的可能是 www 或 runner 用户。
- 进项目根目录,运行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意不加-g) - 它会安全追加到
composer.json的repositories字段,不覆盖已有私有源 - 改完后必须删
composer.lock,再执行composer update --lock,否则新源不会写入 lock 文件 - 若项目已有
"repositories": []数组格式,命令会报错,需先手动改成对象"repositories": {}
真正起效的关键点永远在 composer.lock 里那一行 dist.url ——它不更新,前面所有配置都只是纸上谈兵。

















