作者 | 弗拉德
來源 | 弗拉德(公衆號:fulade_me)
什麼是Pub工具
Dart 生態系統使用包來管理共享軟件,比如:庫和工具。我們使用Pub包管理工具 來獲取Dart包。在Pub上,可以找到公開可用的包。或者從本地文件系統或其他的位置,比如Git倉庫,加載可用的包。無論包是從什麼途徑加載的, Pub 都會進行版本依賴管理,從而幫助我們獲得版本兼容的軟件包以及SDK。
pub工具包含管理 Package 、部署 Package 和部署命令行應用的命令。
Dart 包目錄中至少包含一個pubspec文件。
pubspec 文件記錄一些關於項目的依賴數據。此外還有一些其他數據比如:Dart 庫,應用,資源,測試,圖片,以及示例。
下面是一個 pubspec 的示例,示例中聲明依賴了在 Pub 站點上託管的兩個包( js 和 intl ):
name: my_app
dependencies:
js: ^0.6.0
intl: ^0.15.8
pub get
在項目中配置了pubspec文件後,就可以在項目根目錄中執行pub get
命令:
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 文件(位於應用程序的根路目錄下),該文件將應用程序所依賴的每個包名相應的映射到系統緩存中的包。
pub upgrade
第一次獲取依賴時,Pub 會下載依賴及其兼容的最新版本。然後通過創建lockfile
鎖定依賴,以始終使用這個版本。 Pub會在pubspec
旁創建並存儲一個名爲pubspec.lock
文件。它列出了使用的每個依賴包的指定版本(當前包或傳遞包的版本)。
在開發項目中的每個人都能夠使用所有相同版本的包。同樣加入到 lockfile 可以保證部署的應用使用的是同一版本的代碼。
如果已經準備更新依賴到最新版本,使用命令 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添加或刪除其它的上傳者。其有兩個子命令add
和remove
,可以將郵件地址作爲某個上傳者的標識以此來添加或刪除上傳者。例如:
pub uploader add [email protected] # 我們已經向 [email protected] 發送了一份邀請函,在他/她確認後就會成被加入上傳者(權限)
pub uploader remove [email protected] # // 成功將該上傳者從 package 中移除
如果 Package 有且只有一個上傳者,則該上傳者不能再被刪除。你可以將自己從上傳者列表中刪除(只要 Package 中還有其它的上傳者即可),但是一旦你刪除了自己後則不能再將自己添加回去。
默認情況下,你修改的是當前工作目錄中 Package 的上傳者。你可以通過 --package 標識來指定修改哪個 Package 的上傳者。例如:
pub uploader --package=transmogrify add [email protected]
# // 我們已經向 [email protected] 發送了一份邀請函,在他/她確認後就會成被加入上傳者(權限)
通過 pub uploader add <email>
命令發送邀請,被邀請的用戶必須接受。
其他不常用的命令可參考:
pub outdated 使用方法參考:https://zhuanlan.zhihu.com/p/138638020
pub global 使用方法參考:https://www.jianshu.com/p/8a7f2cbac7a1