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
Resolving dependencies...
> args 1.6.0 (was 1.4.4)
...
Changed 1 dependency!
要修复第二个依赖项(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
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
的输出为每个已过时依赖项提供了四列版本信息。以下是 示例 输出中显示四列版本的部分内容:当前、可升级、可解析和最新。
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
文件时,通常会更新依赖项和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
。
除非另有说明,否则本网站上的文档反映了 Dart 3.5.3。页面上次更新于 2024-05-06。 查看源代码 或 报告问题。