-
Notifications
You must be signed in to change notification settings - Fork 16
Description
介绍
Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK。Flutter 兼容现有的代码,免费并且开源,在全球开发者中广泛被使用。
Flutter 在工程上可以通过环境变量的方式,通过镜像地址获取相应的内容。
上游源 1(官方镜像)的地址
FLUTTER_STORAGE_BASE_URL 的默认地址(官方镜像)是 GCS 地址:https://storage.googleapis.com
在代码中实际使用的是如下几个 Buckets:
- https://storage.googleapis.com/flutter_infra
- https://storage.googleapis.com/dart-archive
- https://storage.googleapis.com/flutter-catalog
- https://storage.googleapis.com/pub-packages
- https://storage.googleapis.com/download.dartlang.org
因此 FLUTTER_STORAGE_BASE_URL 镜像需要同步(不太清楚 GCS 的 rsync 同步方法),或者反代,或者反代 + 缓存(类似七牛的镜像存储,阿里云 OSS 的镜像回源,第一次请求走反代,之后就会被缓存到国内的服务器以支持之后的请求),镜像整个 GCS 显然是不科学的,所以仅镜像上述几个 buckets 即可。
上游源 2(官方镜像)的地址
PUB_HOSTED_URL 的默认地址(官方镜像)是 https://pub.dartlang.org/
这是 Flutter 命令行工具在执行库搜索时要调用的 API 服务器,除此之外,可能需要对它的返回值做一些修改,API 请求比如:https://pub.dartlang.org/api/packages/flutter_webview_plugin
在这个返回的 JSON 字符串里,可能需要替换 storage.googleapis.com 成咱们自己搭建的 FLUTTER_STORAGE_BASE_URL 镜像地址。
因为里面有这些库的 archive 下载地址,那个下载地址也是类似这样的 URL:
https://pub.dartlang.org/packages/flutter_webview_plugin/versions/0.0.5.tar.gz
这个 URL,上游服务器端直接返回的是 GCS 的地址,经过测试,可以通过 nginx 里类似 proxy_redirect 的参数完成这个跳转:如果上游返回了 GCS 地址,自动替换这个跳转。
Nginx 的样例代码:
subs_filter_types application/json text/xml text/css text/js text/javascript;
proxy_set_header Accept-Encoding '';
proxy_pass https://pub.dartlang.org/;
subs_filter storage.googleapis.com {FLUTTER_STORAGE_BASE_URL 镜像};
subs_filter pub.dartlang.org {PUB_HOSTED_URL 的镜像};
subs_filter dartlang-pub.appspot.com {PUB_HOSTED_URL 的镜像};
proxy_redirect https://pub.dartlang.org/ {PUB_HOSTED_URL 的镜像};
proxy_redirect https://storage.googleapis.com/ {FLUTTER_STORAGE_BASE_URL 镜像};
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host "dartlang-pub.appspot.com";
为什么希望添加该镜像
随着谷歌对 Flutter 的强力推动,在国内的一线公司如阿里、腾讯、京东等已经开始使用 Flutter,学习 Flutter 对我们自身的技能提高有很大的帮助。
同时我相信这个工具也可以提升开发者的效率,帮助他们更好的改变世界。