【Flutter 1-15】Flutter手把手教程Dart語言——包管理工具Pub詳解、pub g

做者 | 弗拉德
來源 | 弗拉德(公衆號:fulade_me)chrome

什麼是Pub工具

Dart 生態系統使用包來管理共享軟件,好比:庫和工具。咱們使用Pub包管理工具 來獲取Dart包。在Pub上,能夠找到公開可用的包。或者從本地文件系統或其餘的位置,好比Git倉庫,加載可用的包。不管包是從什麼途徑加載的, Pub 都會進行版本依賴管理,從而幫助咱們得到版本兼容的軟件包以及SDK。
pub工具包含管理 Package 、部署 Package 和部署命令行應用的命令。
Dart 包目錄中至少包含一個pubspec文件。
2020_12_06_pubspec
pubspec 文件記錄一些關於項目的依賴數據。此外還有一些其餘數據好比:Dart 庫,應用,資源,測試,圖片,以及示例。緩存

下面是一個 pubspec 的示例,示例中聲明依賴了在 Pub 站點上託管的兩個包( js 和 intl ):bash

name: my_app
dependencies:
  js: ^0.6.0
  intl: ^0.15.8

pub get

在項目中配置了pubspec文件後,就能夠在項目根目錄中執行pub get命令:markdown

cd <path-to-my_app>
 pub get

pub get命令肯定當前應用所依賴的包,並將它們保存到中央系統緩存(central system cache)中。若是當前應用依賴了一個公開包,Pub會從Pub站點 該包。對於一個Git依賴,Pub會Clone該Git倉庫。
一樣包括包的相關依賴也會被下載。例如,若是 js 包依賴 test 包, pub 會同時獲取js包和test包。網絡

Pub 會建立一個.packages 文件(位於應用程序的根路目錄下),該文件將應用程序所依賴的每一個包名相應的映射到系統緩存中的包。
2020_12_06_packagesapp

pub upgrade

第一次獲取依賴時,Pub 會下載依賴及其兼容的最新版本。而後經過建立lockfile 鎖定依賴,以始終使用這個版本。 Pub會在pubspec旁建立並存儲一個名爲pubspec.lock文件。它列出了使用的每一個依賴包的指定版本(當前包或傳遞包的版本)。
2020_12_06_pubspec_lock
在開發項目中的每一個人都可以使用全部相同版本的包。一樣加入到 lockfile 能夠保證部署的應用使用的是同一版本的代碼。ide

若是已經準備更新依賴到最新版本,使用命令 pub upgrade :工具

pub upgrade

上面的命令用於從新生成 lockfile 文件,並使用最新可用版本的依賴包。若是僅升級某個依賴,能夠在命令中指定須要升級的包:測試

pub upgrade intl

上面的命令升級intl到最新版本,其它包不變。網站

注意pub upgrade 命令並不是老是能夠將全部的package更新到最新版本,緣由是pubspec文件中的一些package之間有版本限制的衝突。

pub cache

用於管理 Pub 的本地 Package 緩存。使用該命令你能夠將一個 Package 添加至緩存,或者清除全部緩存的 Package 並從新安裝。
你可使用pub cache add命令將新的 Package 添加至緩存。也可使用pub cache repair 命令將Package從緩存中清除並從新安裝。

pub cache add <package> [--version <constraint>] [--all]
pub cache repair

選項

add <package>    # 在你的緩存中安裝一個庫。

--all   # 可選的選項。與 pub add 結合使用用於安裝某個庫的全部版本。

--version <constraint>  # 可選的選項。與 pub add 結合使用根據限制條件安裝最適合的版本。
# 例如:pub cache add barback --version "<=0.8.0 <0.110"  若是省略掉 --version,Pub 會從已知的版本中挑選一個最適合的進行安裝。

repair # 若是 Pub 緩存中的 Package 被修改壞了的。例如,有人不當心修改了依賴內的文件,可是不知道該如何修改回來。pub cache repair 命令能夠對系統緩存中的全部 Package 執行重安裝以修正篡改的問題。

pub deps

該命令能夠將 Package 的依賴圖示打印輸出到控制檯。該圖示中包括 Package 聲明在 pubspec 文件中的直接依賴以及這些直接依賴所依賴的間接依賴

pub deps [--style=<style>] [--dev] [--no-dev] [--executables]

依賴信息默認以樹狀的形式打印輸出。
例如,有個項目的pubspec文件中聲明瞭以下依賴信息:

dependencies:
  barback: ^0.15.2
  markdown: ^0.7.2

當你執行 pub deps 命令時則會看到項目的依賴圖示以下:

markdown_converter 0.0.0
|-- barback 0.15.2+6
|   |-- collection 1.1.2
|   |-- path 1.3.6
|   |-- pool 1.1.0
|   |   '-- stack_trace...
|   |-- source_span 1.2.0
|   |   '-- path...
|   '-- stack_trace 1.4.2
|       '-- path...
'-- markdown 0.7.2

選項

--style=<style> 或 -s <style> ## 指定的樣式輸出格式。用於指定依賴項打印輸出的樣式。

# 共有 簡潔、樹狀 和 列表 三種,默認是樹狀樣式。

# tree 以樹狀的形式打印依賴信息。這是默認格式。

# list 以列表的形式打印依賴信息。

# compact 以緊湊列表的形式打印依賴信息。

--dev # 打印全部包依賴信息,包括開發時期依賴。它是默認選項。

--no-dev #打印除了開發期依賴以外的全部包依賴。

--executables #打印全部可用的可執行文件。

pub downgrade

在沒有其它額外參數的狀況下,pub downgrade命令會獲取當前工做目錄下 pubspec.yaml 文件中列出的全部依賴項以及它們間接依賴項的最低版本。

pub downgrade [--[no-]offline] [-n|--dry-run] [dependencies...]

例如:

$ pub downgrade
Resolving dependencies... (1.2s)
+ barback 0.13.0
+ collection 0.9.1
+ path 1.2.0
+ source_maps 0.9.0
+ source_span 1.0.0
+ stack_trace 0.9.1
Changed 6 dependencies!

pub downgrade 命令會建立一個lockfile文件。若是lockfile文件已經存在,Pub 則會忽略該文件並生成一個新的lockfile 文件,而後全部依賴項都會使用最低版本。

降級指定依賴項
你能夠指定pub downgrade命令只將某個依賴項的版本降至最低且不影響其他依賴項。例如:

$ pub downgrade test
Resolving dependencies...
  barback 0.15.2+2
  bot 0.27.0+2
  browser 0.10.0+2
  chrome 0.6.5
  collection 1.1.0
  path 1.3.0
  pool 1.0.1
  source_span 1.0.2
< stack_trace 0.9.2 (was 1.1.1)
  stagexl 0.10.2
< test 0.10.0 (was 0.11.4)
These packages are no longer being depended on:
- matcher 0.11.3
Changed 3 dependencies!

若是你下降指定依賴項的版本,且該依賴項還有間接依賴項,那麼在版本變動後這些間接依賴項可能不適配下降後的新版依賴項。此時,Pub 會嘗試在新版本依賴項可接受的範圍內查找版本最高的該依賴項所依賴的間接依賴項。所以,一般而言,下降某個依賴項的版本後,其間接依賴項的版本也會隨之下降。
獲取新的依賴項
若是在執行pub downgrade命令前將某個依賴添加至 pubspec 文件中,則在執行該命令後會將該新的依賴項以及其間接依賴的其它依賴項下載並將其放到 .packages 文件中。這點與 pub get 命令一致。

移除依賴項
若是在 pub downgrade 命令前從 pubspec 文件移除了某個依賴項,則在執行該命令後會將該依賴項從 .packages 文件中移除,且代碼使用到該依賴項的相關導入將變得不可用。全部該依賴項依賴的間接依賴項也同時會被移除,只要這些間接依賴項沒有沒其它的依賴項所依賴。這點也與pub get 命令一致。

離線降級
在沒有網絡的狀況下你也依然能夠運行pub downgrade 命令。由於 Pub 會將 Package 下載到一個統一的緩存區並將其與系統上其它的 Package 進行共享,若是你所需的 Package 是一個使用頻率很高的 Package,那麼頗有可能它已經被其它 Package 在使用時下載到統一緩存區中了,此時你能夠直接依賴使用它。

可是,默認狀況下,pub downgrade 命令會老是嘗試獲取線上的依賴版本,所以 Pub 能夠肯定依賴項是否有更新的版本。若是你不想 Pub 去線上檢查,可使用 --offline 命令參數讓該命令在離線模式下執行。在離線模式下,Pub 只會從本地緩存區查找已經下載到的可用 Package。

選項

--[no-]offline # 默認狀況下,pub 將會經過網絡檢查(--no-offline)。要使用緩存的包,請使用 --offline。
--dry-run 或 -n #報告將要改變的依賴項,但不會真的改變它。

pub publish

pub publish [--dry-run] [--force]

該命令用於將你的 Package 發佈到pub.dev網站以供其餘人下載和依賴。
選項

--dry-run 或 -n #該選項可讓你運行上傳 Package 的整個流程但不會真正地上傳任何文件到 pub.dev 網站。此操做可讓你在真正上傳到 pub.dev 網站前檢查你的上傳等相關配置是否有誤。

--force 或 -f  #該選項讓 Pub 在上傳時再也不向你進行確認。正常狀況下,它會在你上傳時向你顯示 Package 的內容以及向你進行確認。

若是 Package 存在錯誤,Pub 則會退出且不繼續進行上傳。若是出現的是警告,則 Package 會依舊被上傳。若是你想確保你的 Package 在上傳前沒有警告,請確保不要使用 --force--dry-run 選項。

pub uploader

pub uploader [options] {add/remove} <email>

該命令容許pub.dev網站上某個 Package的上傳者爲該Package添加或刪除其它的上傳者。其有兩個子命令addremove,能夠將郵件地址做爲某個上傳者的標識以此來添加或刪除上傳者。例如:

pub uploader add bob@example.com # 咱們已經向 bob@example.com 發送了一份邀請函,在他/她確認後就會成被加入上傳者(權限)
pub uploader remove bob@example.com # // 成功將該上傳者從 package 中移除

若是 Package 有且只有一個上傳者,則該上傳者不能再被刪除。你能夠將本身從上傳者列表中刪除(只要 Package 中還有其它的上傳者便可),可是一旦你刪除了本身後則不能再將本身添加回去。

默認狀況下,你修改的是當前工做目錄中 Package 的上傳者。你能夠經過 --package 標識來指定修改哪一個 Package 的上傳者。例如:

pub uploader --package=transmogrify add bob@example.com 
 # // 咱們已經向 bob@example.com 發送了一份邀請函,在他/她確認後就會成被加入上傳者(權限)

經過 pub uploader add &lt;email&gt; 命令發送邀請,被邀請的用戶必須接受

其餘不經常使用的命令可參考:

pub outdated 使用方法參考:https://zhuanlan.zhihu.com/p/138638020
pub global 使用方法參考:https://www.jianshu.com/p/8a7f2cbac7a1


公衆號

相關文章
相關標籤/搜索