dart pub outdated
outdated 是 pub 工具的命令之一。
$ dart pub outdated [options]使用 dart pub outdated 命令可以識別過時的包依賴項,並獲取有關如何更新它們的建議。依賴項管理的最佳實踐包括使用最新穩定版本的包,這樣你就可以獲得最新的 bug 修復和改進。
概覽
#以下是如何使用 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.
可解析版本(Resolvable) 列顯示了每個過時依賴項可以升級到的版本。你可以透過查詢最左側非紅色值的列來獲取更多資訊。例如,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 的條目,使用可解析版本(Resolvable) 列中的版本(或相容的更高版本)。在脫字號語法中,它是 ^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 包,而後者又依賴於舊版本的 path 和 meta。一旦 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選項。
例如,假設你的應用依賴於 foo 和 bar 包,但 bar 的最新版本只允許較舊的主要版本 foo。結果就是,foo 的最新可解析版本與 foo 的最新版本不同。
編輯 pubspec.yaml 檔案時,通常會更新 dependencies 和 dev_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 會列出所有依賴項