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.
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
列出所有依赖项
除非另有说明,本网站上的文档反映了 Dart 3.6.0。页面上次更新于 2024-12-10。 查看源代码 或 报告问题。