目录

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,则该依赖项不再可用于导入。只要没有剩余的直接依赖项也依赖于已删除的依赖项,则还会删除已删除依赖项的任何传递依赖项。删除依赖项永远不会更改任何已获取的依赖项的版本。

系统包缓存

#

通过 Internet 下载的依赖项(例如来自 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 或部署到生产环境非常有用。

阅读为生产环境获取依赖项以获取更多详细信息。