跳到主要內容

dart pub outdated

outdatedpub 工具的命令之一。

$ dart pub outdated [options]

使用 dart pub outdated 命令可以識別過時的包依賴項,並獲取有關如何更新它們的建議。依賴項管理的最佳實踐包括使用最新穩定版本的包,這樣你就可以獲得最新的 bug 修復和改進。

概覽

#

以下是如何使用 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.

可解析版本(Resolvable) 列顯示了每個過時依賴項可以升級到的版本。你可以透過查詢最左側非紅色值的列來獲取更多資訊。例如,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 的條目,使用可解析版本(Resolvable) 列中的版本(或相容的更高版本)。在脫字號語法中,它是 ^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 包,而後者又依賴於舊版本的 pathmeta。一旦 terminal_tools 包得到更新,這個包也應該可以更新了。

輸出列

#

dart pub outdated 的輸出為每個過時依賴項提供了四列版本資訊。以下是示例輸出中顯示這四個版本列的部分:當前版本 (Current)、可升級版本 (Upgradable)、可解析版本 (Resolvable) 和最新版本 (Latest)。

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
當前版本 (Current)
你的包中使用的版本,記錄在 pubspec.lock 檔案中。如果包不在 pubspec.lock 中,則該值為 -
可升級版本 (Upgradable)
你的 pubspec.yaml 檔案允許的最新版本。這是 dart pub upgrade 解析到的版本。如果“當前版本(Current)”列中的值為 -,則該值為 -
可解析版本 (Resolvable)
與所有其他依賴項結合時可以解析到的最新版本。如果 pubspec.yaml 中的所有版本約束都未設定上限,則此版本與 dart pub upgrade 提供給你的版本相符。值為 - 表示不需要此包。
最新版本 (Latest)
可用的最新包版本,不包括預釋出版本,除非你使用 --prereleases 選項。

例如,假設你的應用依賴於 foobar 包,但 bar 的最新版本只允許較舊的主要版本 foo。結果就是,foo 的最新可解析版本與 foo最新版本不同。

編輯 pubspec.yaml 檔案時,通常會更新 dependenciesdev_dependencies 部分,以便每個包都使用可解析版本(Resolvable) 列中的版本。

選項

#

有關適用於所有 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 會列出所有依賴項