自訂套件儲存庫
dart pub
工具支援第三方套件儲存庫。套件儲存庫是託管 Dart 套件以供 dart pub
工具使用的伺服器。預設使用的套件儲存庫 pub.dev 由 Dart 團隊營運,以方便發佈 Dart 套件供公開使用。套件儲存庫由 hosted-url 識別,例如 https://dart-packages.example.com/
。
有時,自訂套件儲存庫對於託管私有套件可能很有用,包括在下列某些情境中
- 在組織內部分享內部專有套件。
- 嚴格控制企業環境中的相依性。
- 沒有公共網際網路存取的安全環境。
使用 git-相依性 託管私有套件也很常見,但是 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.
您也可以透過 --env-var
旗標,告知 dart pub
從環境變數 (包括在 CI 環境中) 讀取權杖
$ 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。例如
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
...
覆寫預設套件儲存庫
#預設情況下,除非使用 hosted-相依性語法指定自訂套件儲存庫,否則 dart pub
會從 pub.dev 網站擷取相依性並將套件發佈到該網站。但是,您可以使用 PUB_HOSTED_URL
環境變數覆寫預設套件儲存庫。
在受限的網路環境中工作時,當鏡像私有套件儲存庫中的所有套件或 pub.dev 的子集時,此方法特別有用。
設定自訂套件儲存庫
#您可以透過實作 託管 Pub 儲存庫規格第 2 版中概述的 REST API 來撰寫自訂套件儲存庫。
作為服務的 Dart 套件儲存庫
#多個供應商也以服務形式提供自訂套件儲存庫,並支援權杖驗證,減輕您託管和維護自己的自訂套件儲存庫的負擔
除非另有說明,否則本網站的文件會反映 Dart 3.6.0。頁面最後更新於 2024-11-05。 檢視來源 或 回報問題。