内容

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 获取新的依赖项时,它会写入一个 锁定文件 以确保将来的获取将使用相同版本的这些依赖项。 应用程序包 应将锁定文件检入源代码控制;这确保应用程序将对所有开发人员以及部署到生产环境时使用所有依赖项的完全相同的版本。但是,常规包不应检入锁定文件,因为它们应该能够与一系列依赖项版本一起使用。

如果锁定文件已存在,则 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 站点 的依赖项)存储在 系统范围的缓存 中。这意味着,如果多个包使用相同版本相同依赖项,则只需下载并存储一次。

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

离线获取

#

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

但是,默认情况下,如果您有任何托管依赖项,dart pub get 会尝试联机,以便 pub 可以检测到依赖项的更新版本。如果您不希望 pub 执行此操作,请向其传递 --offline 标志。在脱机模式下,pub 仅查看本地包缓存,尝试从已有的可用版本中找到与您的包配合使用的版本集。

请记住,pub 会生成锁定文件。如果缓存中某个依赖项的唯一版本恰好是旧版本,则脱机 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 或部署到生产环境。

阅读 获取生产依赖项 以了解更多详细信息。