dart pub outdated
Outdated 是 pub 工具的其中一個指令。
$ dart pub outdated [options]
使用 dart pub outdated
來識別過時的套件相依性,並取得如何更新它們的建議。相依性管理的最佳實務包括使用最新的穩定套件版本,讓您可以取得最新的錯誤修正和改進。
總覽
#以下說明如何使用 dart pub outdated
來協助您更新您擁有的套件 (無論是應用程式或一般套件) 的相依性
- 如果您的套件沒有簽入原始碼控制的
pubspec.lock
檔案,請在套件的頂層目錄 (包含您套件的pubspec.yaml
檔案的目錄) 中執行dart pub get
。 - 執行
dart pub outdated
以識別哪些套件相依性已過時。記下受影響的套件,以便稍後您可以測試使用它們的程式碼行為。 - 遵循
dart pub outdated
的建議來更新套件。某些更新可能只需要執行dart pub upgrade
。其他更新可能需要在執行dart pub upgrade
之前更新pubspec.yaml
。 - 執行
dart pub outdated
以確認您使用的是最新的相容套件版本。 - 測試您的套件以確認它仍然如預期般運作。
由於遞移相依性,您可能仍然有過時的相依性。如果您想判斷原因,請嘗試執行 dart pub deps
並在輸出中搜尋每個過時套件的名稱。
範例
#以下是在具有多個過時相依性的範例上執行 dart pub outdated
的範例。其中三個相依性 (args
、http
和 path
) 是直接相依性,一個是遞移相依性 (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。path
和 meta
套件不是最新版本,但考慮到所有其他相依性,它們是最新的可解析版本。
若要修正第一個相依性 (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
以確認您已完成所有必要的變更。在此範例中,由於其他相依性決定的限制,path
和 meta
套件仍然過時
$ 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
套件相依於舊版本的 path
和 meta
。一旦 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
選項,否則不包括預發布版本。
例如,假設您的應用程式相依於 foo
和 bar
套件,但最新版本的 bar
只允許舊版的主要版本 foo
。結果是 foo
的最新可解析版本與 foo
的最新版本不同。
當您編輯 pubspec.yaml
檔案時,您通常會更新 dependencies 和 dev_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
列出所有相依性
除非另有說明,否則本網站的文件反映 Dart 3.7.1。頁面最後更新於 2025-01-26。 查看原始碼 或 回報問題。