自訂套件儲存庫
dart pub
工具支援第三方套件儲存庫。套件儲存庫是託管 Dart 套件的伺服器,供 dart pub
工具使用。預設使用的套件儲存庫 pub.dev 由 Dart 團隊營運,以促進 Dart 套件的公開發佈。套件儲存庫由託管 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
中指定套件的託管 URL,使用 託管套件 的語法。例如
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
使用多個套件儲存庫
#您也可以從不同的套件儲存庫擷取不同的相依性,因為可以為每個相依性指定託管 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
...
覆寫預設套件儲存庫
#預設情況下,除非使用 hosted-dependency 語法指定自訂套件儲存庫,否則 dart pub
會從 pub.dev 網站擷取相依性並將套件發佈到該網站。但是,您可以使用 PUB_HOSTED_URL
環境變數覆寫預設套件儲存庫。
當在受限網路環境中工作時,鏡像私人套件儲存庫中的所有套件或 pub.dev 的子集時,此方法特別有用。
設定自訂套件儲存庫
#您可以透過實作 託管 Pub 儲存庫規格版本 2 中概述的 REST API 來撰寫自訂套件儲存庫。
Dart 套件儲存庫即服務
#自訂套件儲存庫也以服務形式提供,並由多家供應商支援權杖驗證,從而減輕您託管和維護自己的自訂套件儲存庫的負擔
除非另有說明,否則本網站上的文件反映的是 Dart 3.7.1 版本。頁面上次更新於 2025-01-04。 檢視原始碼 或 回報問題。