必须换国内镜像源,因默认走packagist.org导致DNS解析慢、TLS握手卡顿、首字节延迟高;执行composer config -g repo.packagist确认URL是否为https://mirrors.aliyun.com/composer/等国内地址,为空或仍显示packagist.org则未生效。

国内环境下 Composer 依赖下载慢,不是带宽问题,而是默认走 packagist.org 导致 DNS 解析慢、TLS 握手卡顿、首字节延迟高——换镜像源是必须做的第一步,不是“可选优化”。
怎么确认当前用的是哪个镜像源
执行 composer config -g repo.packagist,输出应为类似 "https://mirrors.aliyun.com/composer/" 的 URL。如果为空、null 或仍是 "https://packagist.org",说明镜像没生效。
- 旧版 Composer(1.x)不识别
repo.packagist,需改用:composer config -g repos.packagist '{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}' - 项目级
composer.json中若定义了repositories,会覆盖全局配置,此时要删或改项目配置 - 验证是否真走镜像:加
-vvv运行composer install,看日志里下载地址是不是镜像域名(如mirrors.aliyun.com)
为什么换了镜像还卡在 Resolving dependencies
这个阶段不走网络,但严重受 PHP 环境和依赖结构影响:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
COMPOSER_MEMORY_LIMIT过低(如 128M),导致依赖图解析失败重试 —— 临时加COMPOSER_MEMORY_LIMIT=-1再试 - 启用了
xdebug(运行php -v可确认),会让解析慢 5–10 倍 —— 用php -d xdebug.mode=off $(which composer) install临时禁用 -
platform配置与实际 PHP 版本不匹配(如"php": "7.4"却在 PHP 8.2 上运行),触发降级查找逻辑 -
composer.lock残留已下线包的引用,导致回退搜索 —— 删掉vendor/和composer.lock,再用composer install --no-cache
parallel-downloads 和 http-max-concurrent-downloads 有什么区别
这是最容易混淆的两个配置项,新版 Composer(2.2+)只认后者,前者已弃用:
-
parallel-downloads是 Composer 2.2 初期引入的配置名,但很快被http-max-concurrent-downloads替代;设了parallel-downloads不生效,也无报错 - 正确命令是:
composer config -g http-max-concurrent-downloads 10(推荐值 8–10,别超 12) - 并发数调太高可能触发镜像限流或本地 DNS 超时;企业网络对并发敏感时,出现
file_get_contents(): SSL operation failed就得降回 6 或 8
某些包硬编码 GitHub URL,绕不开镜像怎么办
比如有些私有包或老旧 composer.json 里写了 "dist": { "url": "https://github.com/xxx/yyy/archive/"},这种不会走镜像,还会因 GitHub API 限速失败。
- 检查报错是否含
GithubRateLimitException或403 rate limit - 方案一:在
~/.composer/auth.json里配 GitHub Token,提升限额 - 方案二:
composer config -g github-oauth.github.com your_token_here(Token 在 GitHub Settings → Developer settings → Personal access tokens 生成) - 方案三:把这类包 fork 到 Gitee,改
composer.json的dist.url指向 Gitee 的 zip 地址
镜像和并发配置都生效后,仍卡在单个包上,大概率就是这类硬编码 URL 或私有源未适配导致的——它不走镜像、不走并发、也不进缓存,是最容易被忽略的瓶颈点。

















