目录

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 包,而该包又依赖于旧版本的 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 列出所有依赖项