内容

dart pub outdated

已过时pub 工具 的命令之一。

$ dart pub outdated [options]

使用 dart pub outdated 来识别已过时的 包依赖项 并获取有关如何更新它们的建议。 依赖项管理最佳实践 包括使用最新的稳定包版本,以便您可以获得最新的错误修复和改进。

概述

#

以下是如何使用 dart pub outdated 来帮助您更新自己拥有的包(无论是应用还是普通包)的依赖项。

  1. 如果您的包未将 pubspec.lock 文件检入源代码管理,请在包的顶层目录(包含您包的 pubspec.yaml 文件的目录)中运行 dart pub get
  2. 运行 dart pub outdated 以识别哪些包依赖项已过时。记下受影响的包,以便稍后您可以测试使用它们的代码的行为。
  3. 按照 dart pub outdated 的建议更新包。某些更新可能只需要运行 dart pub upgrade。其他更新可能需要在运行 dart pub upgrade 之前更新 pubspec.yaml
  4. 运行 dart pub outdated 以确认您正在使用最新的兼容包版本。
  5. 测试您的包以确认它仍然按预期工作。

由于 传递依赖项,您可能仍然存在已过时的依赖项。如果您想确定原因,请尝试运行 dart pub deps 并搜索输出中每个已过时包的名称。

示例

#

以下是在具有多个已过时依赖项的示例上运行 dart pub outdated 的示例。三个依赖项(argshttppath)是直接依赖项,一个依赖项是传递依赖项(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。pathmeta 包不是最新版本,但考虑到所有其他依赖项,它们是最新的可解析版本。

要修复第一个依赖项(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 以确认您已进行所有必要的更改。在此示例中,由于其他依赖项确定的约束,pathmeta 包仍然已过时。

$ 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 包,后者依赖于旧版本的 pathmeta。更新 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,否则不包括预发布版本。

例如,假设您的应用依赖于 foobar 包,但 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