dart pub upgrade
Upgrade 是 pub 工具的命令之一。
$ dart pub upgrade [options] [dependencies]
与 dart pub get
类似,dart pub upgrade
获取依赖。不同之处在于 dart pub upgrade
会忽略任何现有的 lockfile,以便 pub 可以获取所有依赖的最新版本。一个相关的命令是 dart pub outdated
,你可以运行它来查找过时的依赖。
不带任何附加参数时,dart pub upgrade
会获取当前工作目录中 pubspec.yaml
文件列出的所有依赖及其传递依赖的最新版本。例如
dart pub upgrade
Dependencies upgraded!
当 dart pub upgrade
升级依赖版本时,它会写入一个 lockfile,以确保 dart pub get
将使用这些依赖的相同版本。对于应用 Package,应将 lockfile 提交到源码控制;这确保了应用在所有开发人员环境中以及部署到生产环境时都使用完全相同的依赖版本。对于普通 Package,则不应提交 lockfile,因为 Package 应兼容一系列依赖版本。
如果 lockfile 已经存在,dart pub upgrade
会忽略它并从头开始生成一个新的 lockfile,使用所有依赖的最新版本。
有关 Package 解析和系统 Package 缓存的更多信息,请参阅 dart pub get
文档。
升级特定依赖
#你可以指定 dart pub upgrade
升级特定的依赖到最新版本,同时尽量保留其余依赖不变。例如
dart pub upgrade test args
Dependencies upgraded!
通常,其他依赖不会被升级;它们保持在 lockfile 中锁定的版本。但是,如果请求的升级导致与这些锁定版本不兼容,则会选择性地解锁它们,直到找到兼容的版本集合。
这意味着默认情况下,升级特定依赖不会升级其传递依赖。
要将特定依赖及其所有传递依赖升级到最新版本,请使用 --unlock-transitive
标志。
dart pub upgrade --unlock-transitive test args
获取新依赖
#如果在运行 dart pub upgrade
之前将依赖添加到 pubspec,它将获取新依赖及其任何传递依赖。这与 dart pub get
的行为相同。
移除依赖
#如果在运行 dart pub upgrade
之前从 pubspec 中移除了依赖,该依赖将不再可供导入。被移除依赖的任何传递依赖也会被移除,前提是没有剩余的直接依赖也依赖于它们。这与 dart pub get
的行为相同。
离线升级
#如果你没有网络访问,你仍然可以运行 dart pub upgrade
。因为 pub 会将 Package 下载到系统上所有 Package 共享的中心缓存中,所以通常无需使用网络即可找到之前下载的 Package。
然而,默认情况下,如果你有任何托管依赖,dart pub upgrade
会尝试联网,以便 pub 可以检测到较新的依赖版本。如果你不希望 pub 这样做,请传入 --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 会预编译直接依赖中的可执行文件 (--precompile
)。要防止预编译,请使用 --no-precompile
。
--major-versions
#获取 dart pub outdated
列为可解析(resolvable)的 Package,忽略 pubspec.yaml
文件中的任何上限约束。同时更新 pubspec.yaml
文件中的新约束。
要检查哪些依赖将被升级,你可以使用 dart pub upgrade --major-versions --dry-run
。
--tighten
#更新 pubspec.yaml
文件中依赖的下限以匹配已解析的版本,并返回更改的约束列表。可以应用于特定依赖。
--unlock-transitive
#当与要解锁的 Package 列表一起使用时,首先计算这些 Package 的依赖关系的传递闭包(在当前解析中),然后解锁所有这些 Package。
在工作区中
#在 Pub 工作区中,dart pub upgrade
将升级共享解析中来自所有工作区 Package 的所有依赖。
dart pub upgrade --major-versions
和 dart pub upgrade --tighten
将更新所有工作区 pubspec.yaml
文件中的约束。