composer换镜像后仍卡在downloading,是因为缓存旧元数据且未同步生效:必须执行composer config -g prefer-dist true、composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(末尾斜杠不可少)及composer clear-cache三步,缺一不可;同时清理项目级repositories和prefer-source干扰项,并删除composer.lock重装。

为什么换镜像后 composer require 还卡在 downloading?
不是镜像没生效,而是 Composer 仍在用旧缓存里的海外元数据做解析——它根本没去新镜像源拉包,只是反复重试 TLS 握手或 DNS 解析。常见现象包括:Could not find package symfony/config、长时间停在 Downloading、甚至报 curl: (60) SSL certificate problem。
必须同步做三件事,缺一不可:
-
composer config -g prefer-dist true:国内镜像只缓存 dist 包(ZIP),prefer-dist强制跳过 source 模式 -
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/:注意末尾斜杠不能少,且必须带composer类型参数 -
composer clear-cache:不是cache-clear,这是清元数据缓存,不是运行时缓存
项目级配置如何避免覆盖全局镜像?
如果项目 composer.json 里有 "repositories" 或 "prefer-source": true,Composer 会直接忽略全局镜像,回退到慢速 source 模式。
检查并清理这些干扰项:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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 config --list查看是否被覆盖 - 删掉
composer.json中的repositories字段(除非你真需要私有源) - 移除
"prefer-source": true—— 它会让 Composer 克隆 Git 仓库,而国内镜像几乎不缓存 source - 已有
composer.lock的项目,建议先删掉再composer install,否则锁文件里仍存 packagist.org 地址
哪些 Symfony 组件对镜像同步最敏感?
不是所有组件都一样。以下几类最容易因镜像元数据滞后而失败:
-
symfony/ux-turbo、symfony/ux-live-component:目前大量依赖dev-main版本,阿里云镜像若未及时同步 dev 分支元数据,就会报 “找不到包” -
symfony/skeleton和symfony/website-skeleton:初始化时需拉取数十个子包,串行请求下镜像延迟会被放大 -
symfony/config、symfony/web-link:看似轻量,但它们的依赖树牵扯symfony/polyfill-*等几十个包,每个包都多耗 200ms,总延迟就明显了
Windows 下额外要处理的 TLS 和 DNS 卡点
Windows 用户常遇到“假超时”:命令看起来卡住,其实卡在 DNS 解析或 TLS 握手阶段。这不是 Composer 问题,是系统层网络行为。
除了换镜像和清缓存,还得加两个参数:
-
--prefer-dist:绕过 Git 克隆,直下 ZIP,对只有dev-main的包尤其关键 -
--no-dev:跳过require-dev(如 PHPUnit、PHPStan),节省 60%+ 时间和空间 - 必要时调高超时:
composer config -g process-timeout 600,防止默认 300 秒中断
真正起效的安装命令长这样:composer create-project symfony/skeleton myapp --prefer-dist --no-dev -vvv。看到日志里出现 GET https://mirrors.aliyun.com/composer/ 才算真正走对路。










