跳到主要内容

dart pub outdated

Outdatedpub 工具 的命令之一。

$ 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.

Resolvable 列显示了您可以为每个过期依赖项升级到的版本。您可以通过查找具有非红色值最左侧列来获取更多信息。例如,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 条目以使用 Resolvable 列中的版本(或兼容的更高版本)。在插入符号语法中,它是 ^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 包,而 terminal_tools 包依赖于旧版本的 pathmeta。一旦 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,否则不包括预发布版本。

例如,假设您的应用依赖于 foobar 包,但最新版本的 bar 仅允许较旧的主要版本的 foo。结果是 foo 的最新可解析版本与 foo最新版本不同。

当您编辑 pubspec.yaml 文件时,您通常会更新 dependenciesdev_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 列出所有依赖项