dart pub 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
正在解析依赖项...
> args 1.6.0 (之前为 1.4.4)
...
已更改 1 个依赖项!
要修复第二个依赖项( 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
包名称 当前版本 可升级版本 可解析版本 最新版本
直接依赖项:
path 1.6.2 1.6.2 1.6.2 1.7.0
dev_dependencies:全部是最新的
传递依赖项:
meta 1.1.6 1.1.6 1.1.6 1.1.8
传递 dev_dependencies:全部是最新的
所有依赖项均为最新的可解析版本。
虽然有更新的版本可用,但它们并不相互兼容。
要查看这些包为何过期,您可以运行 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
的输出包含每个过期依赖项的四列版本信息。以下是 示例 输出中显示四列版本的部分内容:当前版本、可升级版本、可解析版本和最新版本。
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.6.0。页面最后更新于 2025-02-05。 查看源代码 或 报告问题.