flutter 将pub.dev软件包镜像到自定义软件包存储库

kd3sttzy  于 2023-02-16  发布在  Flutter
关注(0)|答案(1)|浏览(307)

从Dart 2.15开始,您可以创建自己的包存储库。www.example.comhttps://dart.dev/tools/pub/custom-package-repositories#publishing-to-a-custom-package-repository
我们需要镜像www.example.com软件包的子集(出于公司安全的原因)。但是没有关于如何镜像软件包的信息。我应该派生一个GitHub源代码并手动发布每个允许的软件包版本吗?这看起来非常烦人和耗时。那么传递依赖关系呢?我应该上传所有的吗?pub.dev packages (for corporative security reasons). But there's no information, how to do a package mirroring. Should I fork a GitHub source and publish every allowed package versions manually? It looks exremely annoying and time-consuming. And what about transitive dependencies? Should I upload all of them too?
我还找到了这篇文章:https://medium.com/dartlang/hosting-a-private-dart-package-repository-774c3c51dff9,它也描述了www.example.com镜像场景,但没有解释如何执行。pub.dev mirroring scenario too, but doesn't explains how to do it.

4ngedf3f

4ngedf3f1#

我不知道这是否是您正在寻找的答案,但我相信通过一些实验,可以使用dart包存储库规范中描述的API编写脚本:
https://github.com/dart-lang/pub/blob/master/doc/repository-spec-v2.md
例如,您可以查询软件包的所有版本,如下所示:

curl https://pub.dev/api/packages/test 

{
            "version": "1.23.1",
            "pubspec": {
                "name": "test",
                "version": "1.23.1",
                ...
                "dependencies": {
                    "analyzer": ">=2.0.0 <6.0.0",
                    ...
                    "test_core": "0.4.24"
                },
                "dev_dependencies": {
                    ...
                }
            },
            "archive_url": "https://pub.dartlang.org/packages/test/versions/1.23.1.tar.gz",
            ...
        }
....
}

然后,您可以将archive_url用于您想要下载包的版本,可能会迭代依赖项并下载它们。
然后,您需要将下载的每个软件包版本上传到您的私有存储库中。这可以通过首先在新软件包提交URL上执行GET来完成:

curl https://my-private-repo.tld/api/packages/versions/new

{
    "url": "https://my-private-repo.tld/api/packages/versions/newUpload",
    "fields": {}
}

然后POST由fields描述的表单以及您先前下载到响应中提供的url的归档文件。注意,当我在unpub上测试这个时,fieldsMap是空的,但是根据您的私有repo实现,这可能是不同的。
我们可以想象这样一个脚本,它从要镜像的包列表开始,下载它们,可能还下载它们的依赖项,然后将它们全部上载到私有服务器。
对于可传递的依赖项,这可能取决于您的安全需求。如果您使用PUB_HOSTED_URL=https://my-private-repo.tld,那么运行flutter pub get将从您的私有存储库中下载任何它能找到的依赖项,以及从pub.dev中下载任何其他依赖项。如果这是不可接受的,那么您可能需要将它们全部上传。

相关问题