目录

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
正在解析依赖项...
> 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 以确认您已进行所有必要的更改。在此示例中,由于其他依赖项确定的约束, pathmeta 包仍然已过期:

$ 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 包,该包依赖于旧版本的 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 文件时,通常会更新 dependenciesdev_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 列出所有依赖项