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
包,而 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.7.1 版本。页面上次更新于 2025-01-26。 查看源代码 或 报告问题。