换国内镜像源需同时配置全局仓库和刷新 composer.lock 中的 dist.url,否则仍会请求境外地址导致卡顿;正确命令为 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,并执行 composer update --lock。

换国内镜像源能解决 90% 的 Composer 卡顿问题,但只执行 composer config -g repo.packagist https://mirrors.aliyun.com/composer/ 是无效的——缺 composer 类型标识、漏 -g、URL 少末尾 /,三者任一出错都会静默 fallback 到官方源。
为什么换了镜像还是卡在 downloading hyperf/cache?
根本不是镜像没生效,而是 composer.lock 里记录的 dist.url 还是 https://repo.packagist.org/dists/...。Composer 安装时优先尝试这个地址,失败后不保证 fallback,尤其在 CI 或公司网络下常直接超时。
- 必须执行
composer update --lock强制重写所有包的dist.url字段,让它指向镜像源路径(如https://mirrors.aliyun.com/composer/dists/...) - 新项目用
composer create-project时,直接加--repository=https://mirrors.aliyun.com/composer/,跳过旧 lock 文件干扰 - 验证是否生效:打开
composer.lock,搜任意hyperf/包,确认其dist.url值以mirrors.aliyun.com/composer/dists/开头
全局配置命令必须带 type 和结尾斜杠
repo.packagist 是硬编码键名,拼错大小写、多写 s(如 repos.packagist)、漏 composer 类型值,都会存进无效字段,且完全不报错。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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 https://mirrors.aliyun.com/composer/ - 错误示例:
composer config -g repos.packagist https://mirrors.aliyun.com/composer(少/、少composer、键名错) - 验证是否写入成功:
composer config -g repo.packagist应输出完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 若输出为空或报错,检查
~/.composer/config.json手动确认语法是否合法(JSON 格式错误会导致后续所有 composer 命令失败)
临时切换比全局更安全,适合 CI 或多用户环境
全局配置依赖 ~/.composer/config.json 的属主和权限,在宝塔、Docker 或 CI 中常因用户切换失效;项目级配置可 Git 跟踪、行为一致。
- 进项目根目录,运行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g) - 它会向
composer.json的repositories字段安全合并,不影响已有私有源 - 如果项目已有
"repositories": {"packagist.org": false},先删掉该行,再执行composer clear-cache - 临时单次生效可用:
composer install -vvv --repository-url https://mirrors.aliyun.com/composer/,日志里能看到真实请求 URL
最常被忽略的是 composer.lock 里的 dist URL 没刷新,哪怕镜像配置全对,安装时仍会先发一次请求到境外地址——这步不手动触发 update --lock,就等于没换源。

















