composer config -g repo.packagist 不生效是因为必须同时满足四个硬性条件:键名严格为 repo.packagist(单数、小写、无s)、中间必须显式写 composer(type值)、URL须HTTPS且末尾带/、命令必须带-g;缺一则静默回退官方源,验证需输出完整JSON如{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}。

composer config -g repo.packagist 命令为什么总不生效
根本不是网络或权限问题,而是命令必须同时满足四个硬性条件:键名必须是 repo.packagist(不能多 s、不能少 r)、中间必须显式写 composer 这个 type 值、URL 必须是 HTTPS 且末尾带 /、命令必须带 -g。漏掉任意一个,Composer 就静默 fallback 到 https://packagist.org,不报错也不提示。
验证是否真生效,只看这一行输出:composer config -g repo.packagist。正确结果只能是完整 JSON 对象,例如:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null、报错、或仍含 packagist.org,说明压根没写进去。
常见失效组合:
-
repos.packagist→ 键名非法,配置被忽略 -
composer config -g repo.packagist https://mirrors.aliyun.com/composer/→ 缺composertype 值,2.x 直接降级 -
https://mirrors.aliyun.com/composer(少斜杠)→ 拼出/composerpackages.json,404 后自动重试并回退官方源 - 没加
-g→ 只改当前项目composer.json,换目录即失效
换镜像后还卡在 Downloading 是因为缓存没清
镜像只加速新元数据和包的下载,但 Composer 默认优先读本地缓存。如果缓存里还存着旧的 packages.json 或校验信息,它会继续尝试从 packagist.org 拉取——结果卡在 DNS 解析或 TLS 握手,根本连不到镜像站。
必须执行:composer clear-cache,且建议加 -v 看实际删了什么,确认动作真实发生。CI 或宝塔环境还要注意用户身份:root 配的 -g 配置,www 用户根本读不到,得切到对应用户下运行:sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。
项目级配置更可靠,进项目根目录后执行:composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加 -g),它会自动往 composer.json 的 repositories 字段追加条目,随代码提交,新人拉完就能跑。
http-max-concurrent-downloads 设多少才有效
http-max-concurrent-downloads 是 Composer 2.2+ 唯一有效的并发控制项,但它只对 composer install 有效,对 composer update 几乎无用——因为依赖解析本身是串行的 SAT 求解过程。
推荐设为 8~10:
composer config -g http-max-concurrent-downloads 10- 必须同步加大超时:
composer config -g http.timeout 300和composer config -g process-timeout 3600 - 别设超过
12:阿里云/腾讯云镜像在高并发下容易返回429 Too Many Requests;GitHub 源则可能触发403 rate limit exceeded
注意:parallel-downloads 已被弃用,设了也无效。另外,并发只作用于 HTTP 下载阶段,ZIP 解压、autoload 生成、扩展编译这些本地操作完全不受影响。
哪些操作根本不受镜像和并发参数影响
镜像源和并发设置只管「HTTP 包下载」这一环。以下环节全是单线程,调参毫无意义:
-
composer dump-autoload、composer diagnose:不发网络请求,插件和并发配置完全不介入 -
composer install --no-plugins:显式禁用所有插件,prestissimo等第三方加速器会失效 -
Resolving dependencies阶段卡顿:这是 PHP 在跑 SAT 求解器,CPU 单核吃满,和网络无关。此时该查COMPOSER_MEMORY_LIMIT=-1、关Xdebug、删冗余require-dev,而不是调并发
真正起效的组合就三个:配对的镜像源 + 清缓存 + --prefer-dist。其他都是边际优化,容易白忙活。


















