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
会列出所有依赖项