不能在本地“搭建镜像源”,只能搭本地缓存代理(如packagist-proxy),因其仅作http层反向代理并缓存json元数据,不生成完整镜像;手动同步只是重拉索引,并非真正同步源。

不能在本地“搭建镜像源”,只能搭本地缓存代理(如 Satis 或 Toran Proxy 已停更),而真正可行、轻量、且被广泛验证的方案是用 composer-proxy 或 packagist-proxy 这类反向代理服务,把请求转发给真实镜像站并缓存响应。
为什么你没法“自己同步镜像源”
Composer 镜像站(如阿里云、华为云)的同步逻辑完全由服务端控制:定时轮询 packagist.org 或按需拉取元数据,客户端没有任何命令或 API 能触发它。所谓“手动同步”,只是让你本地重新拉一次最新索引——不是你在同步源,是你在重新消费源。
- 运行
composer update --refresh只是丢弃本地packages.json和provider-*.json,再从当前配置的镜像 URL 重拉,不涉及任何“同步源”的能力 - 想自己跑一个完整镜像?得实现全量抓取、版本去重、JSON 索引生成、HTTP 服务、CDN 接入、HTTPS 证书管理……成本远超收益
- 社区已停更的
satis和toran-proxy不再维护,PHP 8.2+ 下多数功能失效,不建议新项目尝试
真正可用的本地缓存代理怎么配
推荐使用轻量级 Go 写的 packagist-proxy(GitHub 上活跃维护),它不生成镜像,只做 HTTP 层缓存代理,支持并发、压缩、304 响应复用,对 CI/CD 和多项目开发特别友好。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 启动命令:
packagist-proxy -listen :8080 -upstream https://mirrors.aliyun.com/composer/ - 然后配置 Composer 指向本地:
composer config -g repo.packagist composer http://127.0.0.1:8080/(注意末尾/) - 首次请求会穿透到上游,后续相同
packages.json或p/vendor/package.json请求直接返回缓存,TTL 默认 15 分钟可调 - 不缓存 ZIP 包(
dist),只缓存 JSON 元数据——这正是 Composer 同步卡顿的主因,也是最值得缓存的部分
容易踩的坑:缓存没生效却以为配对了
即使代理跑起来了,Composer 仍可能绕过它,原因很隐蔽:
- 项目级
composer.json里有"repositories"字段 → 全局repo.packagist配置被无视,必须删掉或改用"packagist": false+ 显式定义"packagist"key - 代理 URL 写成
http://localhost:8080→ Composer 2.5+ 默认禁用非 HTTPS 源,得先执行composer config -g secure-http false - 没验证真实请求路径:加
-vvv运行composer update,看日志是否出现GET http://127.0.0.1:8080/packages.json;如果还是https://mirrors.aliyun.com/...,说明配置根本没读到 - 代理进程被防火墙拦截(尤其 Windows WSL2 或 macOS Monterey+),用
curl -I http://127.0.0.1:8080/packages.json先确认能通
比代理更简单的替代方案:直接换更快镜像 + 强制刷新
对绝大多数开发者,本地搭代理是过度设计。2026 年实测有效的提速组合更简单:
- 换源:用华为云
https://mirrors.huaweicloud.com/repository/php/composer/(同步延迟稳定 ≤3 分钟,企业级 SLA) - 开并发:
composer config -g parallel-downloads 8(默认仅 3,带宽利用率翻倍) - 强制刷新元数据:
composer update --refresh(≥2.5)或手动删$(composer config --global cache-dir)/repo/https---*下对应目录 - CI 中固定 PHP 版本缓存路径:
$HOME/.composer-cache-8.2,避免混用导致 autoload 错乱
本地代理适合有多个团队共用、或需要审计包来源的场景;日常开发,换源 + 刷新 + 并发三板斧,已经覆盖 95% 的“同步慢”问题。真正难处理的,从来不是网络,而是项目里那些没锁版本的 dev-master 和开着 xdebug 的 PHP 环境。










