目錄

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

$ dart pub upgrade [options] [dependencies]

dart pub upgrade 命令與 dart pub get 命令一樣,都是用於獲取依賴項的。不同的是 dart pub upgrade 命令會忽略掉任何已存在的 lockfile 檔案,因此 Pub 可以獲取所有依賴項的最新版本。

在沒有指定其它引數的情況下,dart pub upgrade 命令會獲取當前工作目錄下 pubspec.yaml 檔案中所列出的所有依賴項的最新版本,包括 這些依賴項中內部依賴的其它依賴項。例如:

$ dart pub upgrade
Dependencies upgraded!

dart pub upgrade 命令會在更新依賴的版本時寫入一個 lockfile 檔案以確保後續使用 dart pub get 命令時使用的是相同的依賴版本。對 [應用 Package][application package] 而言,簽入 lockfile 檔案以控制來源;此操作可以確保當你將應用部署到生產環境時,所有的開發者使用的依賴項都是完全相同的版本以避免衝突。而對庫 Package 而言,則不要簽入 lockfile 檔案,因為庫 Package 會使用到各種不同的依賴版本。

dart pub upgrade 命令會忽略掉已經存在的 lockfile 檔案並從 Scratch 中新建一個,然後使用所有依賴項的最新版本。

你可以查閱 dart pub get 命令文件 獲取更多關於 Package 解析以及系統 Package 快取的資訊。

更新指定的依賴項

你可以使用 dart pub upgrade 命令更新指定的依賴項到最新的版本同時儘可能地保持其餘依賴項不變。例如:

  $ dart pub upgrade test args
  Dependencies upgraded!

更新一個依賴項也會將這個依賴項所依賴的其它依賴項更新到最新版本。通常而言,與這個依賴項無關的其它依賴項不會被更新;它們會保持處於 lockfile 檔案中的版本不變。但是,如果該依賴的升級會導致這些鎖定的版本不相容的話,則不相容的依賴會被解鎖,直到找到一個相容的版本後再重新鎖定。

獲取一個新的依賴項

如果在執行 dart pub upgrade 命令前將一個依賴項新增至 pubspec 檔案,則在執行該命令後會更新依賴項以及該依賴項所依賴的其它依賴項。該行為與 dart pub get 命令一致。

刪除一個依賴項

如果在執行 dart pub upgrade 命令前將一個依賴項從 pubspec 檔案刪除,則在執行該命令後會導致已經匯入使用的該依賴項相關程式碼不可用。任何該依賴項所依賴的其它依賴項也會被同時刪除。該行為與 dart pub get 命令一致。

離線更新

即便沒有網路,你也可以執行 dart pub upgrade 命令。因為 Pub 會將 Package 下載到系統的一個快取中心並與其它 Package 分享,其它 Package 也可以從該快取中心獲取任意已經下載過的 Package,如果你所需的 Package 是一個流行的 Package,則你可以直接從該快取中依賴該 Package 而不需要使用網路。

但是,預設情況下,dart pub upgrade 命令依然會盡可能地存取網路以獲取最新的依賴項版本。如果你不希望其透過網路查詢依賴項,可以在該命令後加上 --offline 引數。在離線模式下,Pub 只會從你的本地 Package 快取中查詢已經存在且能適用到你 Package 上的依賴項。

記住 Pub 會產生一個 lockfile 檔案。如果快取中某個依賴項只有一個版本且該版本是舊版本,則在離線模式下 dart pub upgrade 命令會鎖定你的應用使用這些舊版本。等你有網時,你可以再次執行 dart pub upgrade 命令將它們更新到最新版本。

選項

dart pub upgrade 命令支援 dart pub get 的命令選項 以及更多的選項。你可以查閱全域選項 獲取 Pub 命令所支援的命令選項。

--[no-]offline

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

--dry-run-n

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

--[no-]precompile

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

--null-safety

獲取 dart pub outdated --mode=null-safety 列表中標記為 resolvable 的依賴,忽略 pubspec.yaml 檔案中的任何上限。同時 pubspec.yaml 檔案中的限制也會更新。該命令與 --major-versions 類似。

--major-versions

獲取 dart pub outdated 列表中標記為 resolvable 的依賴,忽略 pubspec.yaml 檔案中的任何上限。同時 pubspec.yaml 檔案中的限制也會更新。

想檢視哪些依賴會被更新,可以執行 dart pub upgrade --major-versions --dry-run