目录

Upgrade 命令是 Pub 工具 中的一个命令。

$ dart pub upgrade [options] [dependencies]

dart pub upgrade 命令与 dart pub get 命令一样,都是用于获取依赖项的。不同的是 dart pub upgrade 命令会忽略掉任何已存在的 lockfile 文件,因此 Pub 可以获取所有依赖项的最新版本。

在没有指定其它参数的情况下,dart pub upgrade 命令会获取当前工作目录下 pubspec.yaml 文件中所列出的所有依赖项的最新版本,包括 这些依赖项中内部依赖的其它依赖项。例如:

$ dart pub upgrade
Dependencies upgraded!

dart pub upgrade 命令会在更新依赖的版本时写入一个 lockfile 文件以确保后续使用 dart pub get 命令时使用的是相同的依赖版本。对 [应用 Package][application package] 而言,签入 lockfile 文件以控制来源;此操作可以确保当你将应用部署到生产环境时,所有的开发者使用的依赖项都是完全相同的版本以避免冲突。而对库 Package 而言,则不要签入 lockfile 文件,因为库 Package 会使用到各种不同的依赖版本。

dart pub upgrade 命令会忽略掉已经存在的 lockfile 文件并从 Scratch 中新建一个,然后使用所有依赖项的最新版本。

你可以查阅 dart pub get 命令文档 获取更多关于 Package 解析以及系统 Package 缓存的信息。

更新指定的依赖项

你可以使用 dart pub upgrade 命令更新指定的依赖项到最新的版本同时尽可能地保持其余依赖项不变。例如:

  $ dart pub upgrade test args
  Dependencies upgraded!

更新一个依赖项也会将这个依赖项所依赖的其它依赖项更新到最新版本。通常而言,与这个依赖项无关的其它依赖项不会被更新;它们会保持处于 lockfile 文件中的版本不变。但是,如果该依赖的升级会导致这些锁定的版本不兼容的话,则不兼容的依赖会被解锁,直到找到一个兼容的版本后再重新锁定。

获取一个新的依赖项

如果在运行 dart pub upgrade 命令前将一个依赖项添加至 pubspec 文件,则在运行该命令后会更新依赖项以及该依赖项所依赖的其它依赖项。该行为与 dart pub get 命令一致。

删除一个依赖项

如果在运行 dart pub upgrade 命令前将一个依赖项从 pubspec 文件删除,则在运行该命令后会导致已经导入使用的该依赖项相关代码不可用。任何该依赖项所依赖的其它依赖项也会被同时删除。该行为与 dart pub get 命令一致。

离线更新

即便没有网络,你也可以运行 dart pub upgrade 命令。因为 Pub 会将 Package 下载到系统的一个缓存中心并与其它 Package 分享,其它 Package 也可以从该缓存中心获取任意已经下载过的 Package,如果你所需的 Package 是一个流行的 Package,则你可以直接从该缓存中依赖该 Package 而不需要使用网络。

但是,默认情况下,dart pub upgrade 命令依然会尽可能地访问网络以获取最新的依赖项版本。如果你不希望其通过网络查找依赖项,可以在该命令后加上 --offline 参数。在离线模式下,Pub 只会从你的本地 Package 缓存中查找已经存在且能适用到你 Package 上的依赖项。

记住 Pub 会生成一个 lockfile 文件。如果缓存中某个依赖项只有一个版本且该版本是旧版本,则在离线模式下 dart pub upgrade 命令会锁定你的应用使用这些旧版本。等你有网时,你可以再次运行 dart pub upgrade 命令将它们更新到最新版本。

选项

dart pub upgrade 命令支持 dart pub get 的命令选项 以及更多的选项。你可以查阅全局选项 获取 Pub 命令所支持的命令选项。

--[no-]offline

默认情况下,pub 会从网络上拉取 package (--no-offline)。若你想使用本地的 package,使用 --offline 参数。想了解更多细节,请查看 离线获取 package.

--dry-run-n

打印出可能变化的依赖,但不会实际作出更改。如果你想要在变更前进行分析,该命令非常有用。

--[no-]precompile

默认情况下,pub 会预编译直接依赖的 package 的可执行文件 (precompile)。若你不需要预编译,请使用 --no-precompile

--null-safety

获取 dart pub outdated --mode=null-safety 列表中标记为 resolvable 的依赖,忽略 pubspec.yaml 文件中的任何上限。同时 pubspec.yaml 文件中的限制也会更新。该命令与 --major-versions 类似。

--major-versions

获取 dart pub outdated 列表中标记为 resolvable 的依赖,忽略 pubspec.yaml 文件中的任何上限。同时 pubspec.yaml 文件中的限制也会更新。

想查看哪些依赖会被更新,可以运行 dart pub upgrade --major-versions --dry-run

--tighten

更新 pubspec.yaml 文件中的依赖下限,并与已解析的版本相匹配后,返回已改变约束的依赖列表。可用于 指定的依赖