dart pub get
Get 是 pub 工具的命令之一。
$ dart pub get [options]
此命令获取当前工作目录中 pubspec.yaml
文件列出的所有依赖项,及其传递依赖项。例如
dart pub get
Resolving dependencies...
Got dependencies!
如果系统缓存中尚不包含依赖项,dart pub get
会更新缓存,并在必要时下载依赖项。为了将包映射回系统缓存,此命令会在 .dart_tool/
目录中创建一个 package_config.json
文件。
获取依赖项后,可以在 Dart 代码中引用它们。例如,如果一个包依赖于 test
import 'package:test/test.dart';
当 dart pub get
获取新依赖项时,它会写入一个lockfile,以确保未来的获取将使用这些依赖项的相同版本。应用包应将 lockfile 提交到源代码管理;这可以确保所有开发人员以及部署到生产环境时,应用将使用所有依赖项的完全相同的版本。但是,常规包不应提交 lockfile,因为它们预期与一系列依赖项版本一起工作。
如果 lockfile 已存在,dart pub get
会尽可能使用其中锁定的依赖项版本。如果某个依赖项未锁定,pub 会获取该依赖项满足所有版本约束的最新版本。这是 dart pub get
和 dart 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 或部署到生产环境很有用。
阅读获取用于生产环境的依赖项以了解更多详细信息。