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 中下载任何其他依赖项。如果这不可接受,那么您可能需要将它们全部上传。