跳到主要內容

dart pub outdated

Outdatedpub 工具的其中一個指令。

$ dart pub outdated [options]

使用 dart pub outdated 來識別過時的套件相依性,並取得如何更新它們的建議。相依性管理的最佳實務包括使用最新的穩定套件版本,讓您可以取得最新的錯誤修正和改進。

總覽

#

以下說明如何使用 dart pub outdated 來協助您更新您擁有的套件 (無論是應用程式或一般套件) 的相依性

  1. 如果您的套件沒有簽入原始碼控制的 pubspec.lock 檔案,請在套件的頂層目錄 (包含您套件的 pubspec.yaml 檔案的目錄) 中執行 dart pub get
  2. 執行 dart pub outdated 以識別哪些套件相依性已過時。記下受影響的套件,以便稍後您可以測試使用它們的程式碼行為。
  3. 遵循 dart pub outdated 的建議來更新套件。某些更新可能只需要執行 dart pub upgrade。其他更新可能需要在執行 dart pub upgrade 之前更新 pubspec.yaml
  4. 執行 dart pub outdated 以確認您使用的是最新的相容套件版本。
  5. 測試您的套件以確認它仍然如預期般運作。

由於遞移相依性,您可能仍然有過時的相依性。如果您想判斷原因,請嘗試執行 dart pub deps 並在輸出中搜尋每個過時套件的名稱。

範例

#

以下是在具有多個過時相依性的範例上執行 dart pub outdated 的範例。其中三個相依性 (argshttppath) 是直接相依性,一個是遞移相依性 (meta)。如下列範例所示,當您在命令列上執行 dart pub outdated 時,預設會將輸出著色。

$ dart pub outdated

Package Name  Current    Upgradable  Resolvable  Latest

direct dependencies:
args          1.4.4      1.6.0       1.6.0       1.6.0
http          0.11.3+17  0.11.3+17   0.12.1      0.12.1  
path          1.6.2      1.6.2       1.6.2       1.7.0   

dev_dependencies: all up-to-date

transitive dependencies:
meta          1.1.6      1.1.6       1.1.6       1.1.8   

transitive dev_dependencies: all up-to-date

1 upgradable dependency is locked (in pubspec.lock) to an older version.
To update it, use `dart pub upgrade`.

1 dependency is constrained to a version that is older than a resolvable version.
To update it, edit pubspec.yaml.

可解析」欄顯示您可以升級到每個過時相依性的哪個版本。您可以透過尋找最左邊的欄位,其中具有非紅色的值來取得更多資訊。例如,args可升級到 1.6.0,而 http可解析到 0.12.1。pathmeta 套件不是最新版本,但考慮到所有其他相依性,它們是最新的可解析版本。

若要修正第一個相依性 (args),它被列為可升級,您只需要執行 dart pub upgrade

$ dart pub upgrade
Resolving dependencies...
> args 1.6.0 (was 1.4.4)
  ...
Changed 1 dependency!

若要修正第二個相依性 (http),它被列為可解析,您可以變更 pubspec 的 http 項目以使用「可解析」欄中的版本 (或相容的更高版本)。在插入符號語法中,它是 ^0.12.1。以下是 pubspec.yaml 的差異

-  http: ^0.11.0
+  http: ^0.12.1

編輯 pubspec.yaml 之後,您執行 dart pub upgrade 以更新 pubspec.lock 檔案。然後您可以執行 dart pub outdated 以確認您已完成所有必要的變更。在此範例中,由於其他相依性決定的限制,pathmeta 套件仍然過時

$ dart pub upgrade
...
$ dart pub outdated
Package Name  Current  Upgradable  Resolvable  Latest

direct dependencies:
path          1.6.2    1.6.2       1.6.2       1.7.0

dev_dependencies: all up-to-date

transitive dependencies:
meta          1.1.6    1.1.6       1.1.6       1.1.8

transitive dev_dependencies: all up-to-date

Dependencies are all on the latest resolvable versions.
Newer versions, while available, are not mutually compatible.

若要查看這些套件為何過時,您可以執行 dart pub deps 並尋找這些套件的相依性

$ dart pub deps -s list
...
dependencies:
...
- terminal_tools 0.1.0
  - path 1.6.2
  - meta 1.1.6
...

如先前的輸出所示,此套件相依於 terminal_tools 套件,而 terminal_tools 套件相依於舊版本的 pathmeta。一旦 terminal_tools 套件更新,就應該可以更新此套件。

輸出欄位

#

dart pub outdated 的輸出針對每個過時的相依性都有四個版本的資訊欄位。以下是範例輸出的一部分,顯示四個版本欄位:「目前」、「可升級」、「可解析」和「最新」。

Package Name  Current    Upgradable  Resolvable  Latest

direct dependencies:
args          1.4.4      1.6.0       1.6.0       1.6.0
http          0.11.3+17  0.11.3+17   0.12.1      0.12.1  
path          1.6.2      1.6.2       1.6.2       1.7.0   

dev_dependencies: all up-to-date

transitive dependencies:
meta          1.1.6      1.1.6       1.1.6       1.1.8
目前
在您的套件中使用的版本,記錄在 pubspec.lock 中。如果套件不在 pubspec.lock 中,則值為 -
可升級
您的 pubspec.yaml 檔案允許的最新版本。這是 dart pub upgrade 解析到的版本。如果「目前」欄中的值為 -,則值為 -
可解析
與所有其他相依性結合時可以解析的最新版本。此版本對應於如果 pubspec.yaml 中的所有版本約束都是無界的,則 dart pub upgrade 給您的版本。值為 - 表示不需要該套件。
最新
可用的最新套件版本,除非您使用 --prereleases 選項,否則不包括預發布版本。

例如,假設您的應用程式相依於 foobar 套件,但最新版本的 bar 只允許舊版的主要版本 foo。結果是 foo 的最新可解析版本與 foo最新版本不同。

當您編輯 pubspec.yaml 檔案時,您通常會更新 dependenciesdev_dependencies 區段,以便每個套件都使用「可解析」欄中的版本。

選項

#

如需適用於所有 pub 指令的選項,請參閱全域選項

--[no-]dependency-overrides

#

預設情況下,在解析套件約束時會考量dependency_overrides (--dependency-overrides)。若要不考量覆寫,請使用 --no-dependency-overrides

--[no-]dev-dependencies

#

預設情況下,在解析套件約束時會考量開發相依性 (--dev-dependencies)。若要不考量開發相依性,請使用 --no-dev-dependencies

--json

#

以 JSON 格式產生輸出。

--[no-]prereleases

#

預設情況下,在判斷最後一個套件版本時會包含預發布版本 (--prereleases)。若要不考量預發布版本,請使用 --no-prereleases

--[no-]transitive

#

預設情況下,不包含遞移相依性作為輸出的一部分 (--no-transitive)。若要包含遞移相依性,請使用 --transitive

--[no-]up-to-date

#

預設情況下,不包含最新版本的相依性 (--no-up-to-date)。若要包含最新版本的相依性,請使用 --up-to-date

在工作區中

#

Pub 工作區 中,dart pub outdated 列出所有相依性