根本原因是默认单线程串行下载,每个包的zip、元数据和hash校验均排队等待单一http连接完成,i/o与tls握手耗时超70%;需用composer 2.2+、清缓存、配正确带/结尾的国内镜像源并禁用插件。

Composer install 为什么卡在 Downloading 而不是 resolving dependencies
根本原因不是网络差,而是默认单线程串行下载:每个包的 dist ZIP、元数据 packages.json、校验 hash 都得排队等一个 HTTP 连接完成。I/O 等待和 TLS 握手占了实际耗时 70% 以上。
实操建议:
- 确认你用的是
Composer 2.2+:composer --version输出必须含2.2或更高——低于此版本压根不支持--concurrency - 临时禁用所有插件:
composer install --no-plugins,排除composer-unused、phpstan-extension-installer等钩子型插件拖慢流程 - 用官方源测基线速度:
composer config -g repo.packagist https://packagist.org,再跑composer install --concurrency=6 --no-interaction,避免镜像源限流干扰判断 - 如果并发没提速,大概率是镜像源不支持 HTTP/2 多路复用(如部分私有源),或 DNS 解析慢——试下
export COMPOSER_NO_TLS=1(仅内网可信环境)或换 DNS 到1.1.1.1
镜像源 URL 结尾少个 / 就会 404
所有国内镜像地址必须以 / 结尾,否则 Composer 会错误拼接路径。比如写成 https://mirrors.aliyun.com/composer,它会去请求 https://mirrors.aliyun.com/composerpackages.json(中间缺了 /),直接返回 404。
常见失效地址举例:
-
https://mirrors.huaweicloud.com/repository/php❌(已 404,且缺/) -
https://repo.huaweicloud.com/repository/php❌(正确域名但缺/) -
https://mirrors.cloud.tencent.com/composer❌(缺/,腾讯云严格校验)
✅ 正确写法(全部带 /):
- 阿里云:
https://mirrors.aliyun.com/composer/ - 腾讯云:
https://mirrors.cloud.tencent.com/composer/ - 华为云:
https://repo.huaweicloud.com/repository/php/ - Laravel China:
https://packagist.laravel-china.org/
项目级 repositories 字段会彻底屏蔽全局配置
只要项目根目录 composer.json 里存在 "repositories" 字段(哪怕空数组、哪怕只写了 {"packagist.org": false}),Composer 就完全忽略 composer config -g repo.packagist 的设置,连 fallback 都没机会触发。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
验证方法:
- 运行
composer config -g repo.packagist,看输出是否为你设的镜像地址 - 再执行
composer diagnose,检查 “Repo:” 行显示的域名是否匹配 - 最准的是加
-vvv跑一次:composer update -vvv 2>&1 | grep "Downloading.*packages.json",日志里的 URL 域名必须是你配的镜像
若发现仍走旧源,立刻检查项目 composer.json 是否硬编码了 "repositories" —— 这类模板(如某些 Laravel 脚手架)最容易埋雷。
切源后不 clear-cache 会继续连错地址
缓存不清理,旧的 packages.json 元数据还在本地,Composer 会照着旧地址发请求,哪怕配置已改对。
必须执行:
-
composer clear-cache(清本地元数据缓存) - Windows 下 Git Bash 用户注意:
COMPOSER_HOME可能未生效,实际读取的是%APPDATA%\Composer\config.json,而非~/.composer/config.json;建议统一用composer config -g写入,避免路径混淆 - Composer 2.2+ 已弃用
repo.packagist旧键名?不会。该字段仍有效,但推荐用repositories.packagist.org;不过只要 URL 正确、结尾带/,repo.packagist依然管用
最容易被忽略的点:切源后直接跑 composer install,没验证也没清缓存,结果问题依旧,却回头去调网络或重装 Composer。










