Skip to content

建议增加 Flutter 镜像 #216

@AdaCheng

Description

@AdaCheng

介绍

Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK。Flutter 兼容现有的代码,免费并且开源,在全球开发者中广泛被使用。
Flutter 在工程上可以通过环境变量的方式,通过镜像地址获取相应的内容。

上游源 1(官方镜像)的地址

FLUTTER_STORAGE_BASE_URL 的默认地址(官方镜像)是 GCS 地址:https://storage.googleapis.com

在代码中实际使用的是如下几个 Buckets:

因此 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 对我们自身的技能提高有很大的帮助。

同时我相信这个工具也可以提升开发者的效率,帮助他们更好的改变世界。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions