【问题标题】:Mirroring pub.dev packages to a custom package repository将 pub.dev 包镜像到自定义包存储库
【发布时间】:2023-02-14 23:48:58
【问题描述】:

从 Dart 2.15 开始,您可以创建自己的包存储库。 https://dart.dev/tools/pub/custom-package-repositories#publishing-to-a-custom-package-repository

我们需要镜像 pub.dev 包的子集(出于公司安全原因)。 但是没有信息,如何做包镜像。 我应该分叉 GitHub 源并手动发布每个允许的包版本吗?它看起来非常烦人和耗时。那么传递依赖呢?我也应该上传所有这些吗?

我还找到这篇文章:https://medium.com/dartlang/hosting-a-private-dart-package-repository-774c3c51dff9,它也描述了 pub.dev 镜像场景,但没有说明如何做。

【问题讨论】:

    标签: flutter dart package repository


    【解决方案1】:

    我不知道这是否是您正在寻找的答案,但我相信通过一些实验,这可以使用 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://local-dart-repo.test/api/packages/versions/new
    
    {
        "url": "https://my-private-dart-repo.tld/api/packages/versions/newUpload",
        "fields": {}
    }
    

    然后 POST fields 描述的表单以及您之前下载的存档到响应中提供的 url。请注意,当我针对 unpub 进行测试时,fields 映射为空,但取决于您的私人回购实现可能会有所不同。

    可以想象一个脚本以要镜像的包列表开始,下载它们,可能还下载它们的依赖项,然后将它们全部上传到私有服务器。

    对于传递依赖性,它可能取决于您的安全要求。如果您使用PUB_HOSTED_URL=https://my-private-repo.tld,那么运行flutter pub get 将下载它可以从您的私有仓库中找到的所有依赖项,以及从 pub.dev 中下载任何其他依赖项。如果这不可接受,那么您可能需要将它们全部上传。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 2015-07-16
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多