换阿里云镜像+清缓存+开parallel-downloads=10可解决90%的composer install慢问题;需严格执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/、composer clear-cache,并验证config -g输出及-vvv日志是否命中镜像地址。

Composer install 慢,90%不是网速问题,而是镜像根本没生效、缓存没清、并发没开——换阿里云镜像只是第一步,光执行一条命令不验证、不清缓存、不调参数,照样卡在 loading package information。
为什么 composer install 还在连 packagist.org?
镜像配置写错了,Composer 就当它不存在,静默 fallback 到默认源。常见错误有:
- 漏掉
-g参数,结果只改了当前项目,而你是在全局环境下运行composer install - 键名写成
repos.packagist(多一个 s)或packagist.org,实际必须是repo.packagist - URL 少了末尾斜杠:
https://mirrors.aliyun.com/composer❌ →https://mirrors.aliyun.com/composer/✅ - 项目根目录下已有
"repositories"字段,优先级高于全局配置,repo.packagist被忽略
验证是否生效,别猜,直接跑:composer config -g repo.packagist。输出里没看到 "url": "https://mirrors.aliyun.com/composer/",就等于没配对。
配完镜像还是卡几秒?先清缓存再重试
Composer 会把旧的元数据缓存在本地,哪怕镜像地址改了,它仍可能用缓存里的 packagist.org 地址去请求。这不是“偶尔慢”,是必然行为。
必须立刻执行:composer clear-cache。之后再跑 composer install -vvv,看日志里出现的 URL 是不是以 https://mirrors.aliyun.com/composer/ 开头。如果还看到 packagist.org 或 404,说明缓存没清干净,或者镜像 URL 多写了斜杠(比如 //)。
注意:某些 CI 环境(如 GitHub Actions)每次构建都是干净环境,必须在 workflow 步骤里显式加 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 和 composer clear-cache,否则每次都在裸连海外源。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
parallel-downloads=10 能压到 30 秒内,但得看版本和环境
这个参数只在 Composer 2.2+ 生效,低于版本设了也白搭。先确认:composer --version。如果不是 ≥2.2,先升级:composer self-update。
设多少合适?
- 默认是 3,基本等于没开
- 推荐设为 10:
composer config -g parallel-downloads 10 - 如果报
file_put_contents(/tmp/): failed to open stream,说明临时文件竞争,降到 6 或 8 - 某些镜像不支持 HTTP/2 多路复用,高并发反而排队堵死,可临时切回官方源测试:
composer config -g repo.packagist composer https://packagist.org/,再试--concurrency=6
为什么加了 --prefer-dist 还在 clone Git?
--prefer-dist 不是万能开关,它只对提供 dist 信息的包生效。常见 fallback 场景:
- 包本身没声明
"dist"字段(比如私有 Git 包未配置) - 项目
composer.json里写了"prefer-source": true,它会覆盖全局设置 - 用了
path类型依赖(如"monolog/monolog": {"type": "path", "url": "../monolog"}),这类必然走 source,且不参与并发下载
日志里看不到 Downloading https://mirrors.aliyun.com/composer/dists/...,却看到 Cloning https://github.com/...,说明根本没走镜像 dist 路径——这不是镜像问题,是包自身结构或项目配置导致的。
镜像配置本身很简单,但 Composer 的优先级规则、缓存机制、并发限制、dist/source 切换逻辑,每一步都容易被忽略。最常踩的坑不是“不会配”,而是“配了以为好了”,结果还在等 5 分钟。










