跳到主要内容

dart pub get

Getpub 工具的命令之一。

$ dart pub get [options]

此命令获取当前工作目录中 pubspec.yaml 文件列出的所有依赖项,及其传递依赖项。例如

dart pub get
Resolving dependencies...
Got dependencies!

如果系统缓存中尚不包含依赖项,dart pub get 会更新缓存,并在必要时下载依赖项。为了将包映射回系统缓存,此命令会在 .dart_tool/ 目录中创建一个 package_config.json 文件。

获取依赖项后,可以在 Dart 代码中引用它们。例如,如果一个包依赖于 test

dart
import 'package:test/test.dart';

dart pub get 获取新依赖项时,它会写入一个lockfile,以确保未来的获取将使用这些依赖项的相同版本。应用包应将 lockfile 提交到源代码管理;这可以确保所有开发人员以及部署到生产环境时,应用将使用所有依赖项的完全相同的版本。但是,常规包不应提交 lockfile,因为它们预期与一系列依赖项版本一起工作。

如果 lockfile 已存在,dart pub get 会尽可能使用其中锁定的依赖项版本。如果某个依赖项未锁定,pub 会获取该依赖项满足所有版本约束的最新版本。这是 dart pub getdart pub upgrade 的主要区别,后者总是尝试获取所有依赖项的最新版本。

包解析

#

默认情况下,pub 会在 .dart_tool/ 目录中创建一个 package_config.json 文件,将包名称映射到位置 URI。

获取新的依赖项

#

如果在 pubspec 中添加了依赖项,然后运行 dart pub get,它会获取新的依赖项及其所有传递依赖项。但是,pub 不会更改任何已获取依赖项的版本,除非为了获取新的依赖项而必需这样做。

移除依赖项

#

如果从 pubspec 中移除依赖项,然后运行 dart pub get,该依赖项将不再可供导入。移除的依赖项的任何传递依赖项也将被移除,前提是没有剩余的直接依赖项也依赖于它们。移除依赖项永远不会更改任何已获取依赖项的版本。

系统包缓存

#

从互联网下载的依赖项,例如来自 Git 和 pub.dev 站点的依赖项,存储在系统范围的缓存中。这意味着如果多个包使用相同依赖项的相同版本,只需下载并在本地存储一次。

默认情况下,系统包缓存位于您的主目录 (在 macOS 和 Linux 上) 的 .pub-cache 子目录中,或者位于 %LOCALAPPDATA%\Pub\Cache (在 Windows 上;位置可能因 Windows 版本而异)。您可以通过在运行 pub 之前设置 PUB_CACHE 环境变量来配置缓存位置。

离线获取

#

如果您没有网络访问权限,仍然可以运行 dart pub get。由于 pub 将包下载到系统上所有包共享的中央缓存中,它通常可以找到以前下载的包,而无需使用网络。

然而,默认情况下,如果您的任何依赖项是托管的,dart pub get 会尝试联网,以便 pub 可以检测到更新版本的依赖项。如果您不希望 pub 这样做,请为其传递 --offline 标志。在离线模式下,pub 只会在您的本地包缓存中查找,尝试从已有的版本中找到一组与您的包兼容的版本。

请记住,pub 会生成一个 lockfile。如果您缓存中某个依赖项的唯一版本恰好是旧的,离线 dart pub get 会将您的应用锁定到该旧版本。下次在线时,您很可能希望运行 dart pub upgrade 以升级到更高版本。

选项

#

对于适用于所有 pub 命令的选项,请参阅全局选项

--[no-]offline

#

默认情况下,pub 连接到网络以检索托管包 (--no-offline)。要改用缓存的包,请使用 --offline。有关详细信息,请参阅离线获取

--dry-run-n

#

报告将更改的依赖项,但不实际进行更改。如果您想在进行更新之前进行分析,此选项非常有用。

--[no-]precompile

#

默认情况下,pub 会预编译直接依赖项中的可执行文件 (--precompile)。要阻止预编译,请使用 --no-precompile

--enforce-lockfile

#

强制解析当前的 pubspec.lock

如果 pubspec.lock 未精确指定 pubspec.yaml 的有效解析,或者如果托管包的任何内容哈希值已更改,则 pub get 将失败并显示错误消息。

对于 CI 或部署到生产环境很有用。

阅读获取用于生产环境的依赖项以了解更多详细信息。