跳到主要内容

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

默认情况下,系统包缓存位于你的主目录的 .pub-cache 子目录中(在 macOS 和 Linux 上),或在 %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 或部署到生产环境。

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