目錄

dart pub get 命令

Get 命令是 Pub 工具 中的一個命令。

$ dart pub get [options]

該命令獲取所有在當前工作目錄下的 pubspec.yaml 檔案中列出的依賴項,以及這些依賴項的 間接依賴項。例如:

$ dart pub get
Resolving dependencies...
Got dependencies!

如果 Pub 的系統快取 中還沒有該依賴項,則 dart pub get 命令會在必要時下載該依賴項並更新快取。該命令會在 .dart_tool/ 資料夾下建立一個 package_config.json 檔案並將之對映到 Pub 的系統快取中。

一旦依賴獲取完畢,就可以在 Dart 程式碼中參考。例如,假如 package 依賴了名為 test 的 package,則可以使用該 package 下的資源:

import 'package:test/test.dart';

dart pub get 命令獲取新依賴項後會寫入一個 lockfile 檔案以確保下次執行該命令時會使用相同的依賴項版本。 [應用型的 package][Application package] 應該總是簽入該 lockfile 檔案以控制來源;從而確保在將 package 部署到生產環境時所有的依賴項對於所有開發者而言都是相同的版本。庫型別的 package 則不需要簽入 lockfile 檔案,因為它們可能需要使用到不同的依賴項版本。

如果 lockfile 已經存在,dart pub get 命令會盡可能地使用鎖定的依賴項版本。如果某個依賴項沒有被鎖定,則 pub 會獲取所有 限定的版本 中最新的那個依賴項版本。這是 dart pub get 命令與 dart pub upgrade 命令最大的不同點,後者總是會去嘗試使用依賴項的最新版本。

Package 解析

預設情況下,pub 會在 .dart_tool/ 資料夾下建立一個 .packages 檔案用於對映 package 名到位置 URI。

獲取一個新的依賴項

如果在執行 dart pub get 命令前將某個依賴新增至 pubspec 檔案中,則在執行該命令後會更新依賴項以及其間接依賴的其它依賴項。但是,pub 不會更改哪些已經存在的依賴項除非有必要獲取它們的新版本。

移除一個依賴項

如果在 dart pub get 命令前從 pubspec 檔案移除了某個依賴項,則在執行該命令後代碼使用到該依賴項的相關匯入將變得不可用。所有該依賴項依賴的間接依賴項也同時會被移除,只要這些間接依賴項沒有沒其它的依賴項所依賴。移除某個依賴項不會對已經獲得的依賴項版本產生任何影響。

系統 Package 快取

依賴項透過網路從類似 Git 儲存庫和 Pub 網站 下載並存儲在一個 系統級的快取 中。這意味著如果多個 Package 使用了相同依賴項的相同版本,它就不再需要透過網路下載,而僅僅只需從本地快取獲取即可。

預設情況下,Pub 快取儲存在你的使用者目錄(macOS 和 Linux)或 %APPDATA%\Pub\Cache 目錄下的 .pub-cache 子目錄中(Windows,不同版本的 Windows 作業系統可能會不一樣)。你可以在執行 Pub 相關命令前透過 PUB_CACHE 系統環境變數配置你想要的快取儲存目錄。

離線檢索

在沒有網路的情況下你也依然可以執行 dart pub get 命令。因為 pub 會將 Package 下載到一個統一的快取區並將其與系統上其它的 package 進行共享,如果你所需的 package 是一個使用頻率很高的 package,那麼很有可能它已經被其它 package 在使用時下載到統一快取區中了,此時你可以直接依賴使用它。

但是,預設情況下,dart pub get 命令會總是嘗試獲取線上的依賴版本,因此 pub 可以確定依賴項是否有更新的版本。如果你不想 pub 去線上檢查,可以使用 --offline 命令引數讓該命令在離線模式下執行。在離線模式下,pub 只會從本地快取區查詢已經下載到的可用 Package。

切記 pub 會產生一個 lockfile 檔案。如果快取中某些依賴專案有且只有一個版本且非常舊,離線模式下執行 dart pub get 命令則依然會使用那些舊的版本。下次當你有可用的網路時,可以使用 dart pub upgrade 命令將其更新到最新版本。

選項

你可以查閱 全域選項 獲取 pub 命令所支援的命令選項。

--[no-]offline

預設情況下,pub 會從網路上拉取 package (--no-offline)。若你想使用本地的 package,使用 --offline 引數。想了解更多細節,請檢視 離線獲取 package.

--dry-run-n

打印出可能變化的依賴,但不會實際作出更改。如果你想要在變更前進行分析,該命令非常有用。

--[no-]precompile

預設情況下,pub 將預編譯直接依賴的 package 中的可執行檔案 (--precompile)。若你不需要預編譯,請使用 --no-precompile

--enforce-lockfile

如果 pubspec.lock 檔案偏離或丟失,則拒絕透過錯誤訊息解決依賴關係。