自定义软件包仓库
dart pub
工具支持第三方软件包仓库。软件包仓库是一个服务器,用于托管 Dart 软件包,供 dart pub
工具使用。默认使用的软件包仓库 pub.dev 由 Dart 团队运营,旨在促进 Dart 软件包的公开发布。软件包仓库由 hosted-url 标识,例如 https://dart-packages.example.com/
。
有时,自定义软件包仓库可能有助于托管私有软件包,包括以下一些场景
- 在组织内共享内部专有软件包。
- 在企业环境中严格控制依赖。
- 没有公共互联网访问的安全环境。
使用 git-dependencies 托管私有软件包也很常见,但是,dart pub
工具不支持针对 git 仓库解析版本;它只是获取 git 仓库的特定修订版本。因此,当多人协作时,通常最好使用私有软件包仓库。
使用自定义软件包仓库进行身份验证
#大多数自定义软件包仓库是需要身份验证的私有软件包仓库。为了针对自定义软件包仓库进行身份验证,dart pub
工具会将一个密钥令牌附加到请求中。
您可以从自定义软件包仓库获取密钥令牌,并手动或通过环境变量指定它。要手动指定密钥令牌,请使用 dart pub token add
命令,该命令会提示输入令牌
$ dart pub token add https://dart-packages.example.com
Enter secret token: [enter secret token]
Requests to "https://dart-packages.example.com" will now be authenticated using the secret token.
您还可以告诉 dart pub
从环境变量中读取令牌,包括在 CI 环境中,使用 --env-var
标志
$ dart pub token add https://dart-packages.example.com --env-var MY_SECRET_TOKEN
Requests to "https://dart-packages.example.com" will now be authenticated using the secret token stored in the environment variable "MY_SECRET_TOKEN".
这确保了 dart pub
实际上不会在其配置中存储密钥令牌,而是仅存储应从环境变量 $MY_SECRET_TOKEN
中读取密钥的事实。这降低了在 CI 作业之间共享执行环境时意外泄漏密钥的风险。
从自定义软件包仓库检索依赖
#要从自定义软件包仓库获取软件包,您必须在 pubspec.yaml
中指定软件包的 hosted-url,使用 hosted packages 的语法。例如
dependencies:
example_package:
hosted: https://dart-packages.example.com
version: ^1.4.0
在前面的示例中,package:example_package
是从 https://dart-packages.example.com
获取的。如果此软件包仓库需要身份验证,请参阅 使用自定义软件包仓库进行身份验证 以获取有关如何验证请求的更多信息。
您还可以使用带有 --hosted
标志的 dart pub add
命令从自定义软件包仓库添加依赖
$ dart pub add example_package --hosted https://dart-packages.example.com
使用多个软件包仓库
#您还可以从不同的软件包仓库获取不同的依赖,因为可以为每个依赖指定 hosted-url
dependencies:
# package retry is fetched from pub.dev (the default package repository)
retry: ^3.0.0
# package example_package is fetched from https://dart-packages.example.com
example_package:
hosted: https://dart-packages.example.com
version: ^1.4.0
这使您能够将私有软件包保留在私有软件包仓库中,同时使用最新的公共软件包作为依赖。
但是,如果您的依赖需要来自不同仓库的同名软件包,则很容易发生冲突。例如,如果软件包 retry
需要来自 pub.dev 的 meta
,而 example_package
需要来自 https://dart-packages.example.com
的 meta
。因此,如果将任何软件包镜像到私有软件包仓库中,通常有必要镜像所有依赖,并更新每个软件包的 dependencies
部分,或 覆盖默认软件包仓库。
发布到自定义软件包仓库
#要将软件包发布到自定义软件包仓库而不是 pub.dev,请在 pubspec.yaml
中指定 publish_to
属性。如果启用了身份验证,则发布使用与检索软件包相同的 令牌身份验证。
要准备将软件包发布到 https://dart-packages.example.com
,您的 pubspec.yaml
应至少如下所示
name: example_package
version: 1.0.0
# Ensures the package is published to https://dart-packages.example.com
publish_to: https://dart-packages.example.com
然后要发布软件包的新版本,请使用 dart pub publish
$ dart pub publish
Publishing example_package 1.0.0 to https://dart-packages.example.com
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
|-- lib
| '-- example_package.dart
'-- pubspec.yaml
...
覆盖默认软件包仓库
#默认情况下,dart pub
从 pub.dev 站点检索依赖并将软件包发布到该站点,除非使用 hosted-dependency 语法指定自定义软件包仓库。但是,您可以使用 PUB_HOSTED_URL
环境变量覆盖默认软件包仓库。
当在受限网络环境中工作时,镜像私有软件包仓库中的所有软件包或 pub.dev 的子集时,此方法特别有用。
设置自定义软件包仓库
#您可以通过实现 Hosted Pub Repository Specification Version 2 中概述的 REST API 来编写自定义软件包仓库。
Dart 软件包仓库即服务
#自定义软件包仓库也作为服务提供,由多家供应商提供令牌身份验证支持,从而减轻您托管和维护自己的自定义软件包仓库的负担
除非另有说明,否则本网站上的文档反映的是 Dart 3.7.1 版本。页面上次更新于 2025-01-04。 查看源代码 或 报告问题。