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
获取新的依赖项时,它会写入一个 锁文件 ,以确保将来的获取将使用相同版本的这些依赖项。 应用程序包 应将锁文件检入源代码管理;这确保应用程序将为所有开发人员以及部署到生产环境时使用所有依赖项的完全相同的版本。但是,常规包不应该检入锁文件,因为它们应该能够使用各种依赖项版本。
如果锁文件已存在, 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 站点 的依赖项,存储在 系统范围缓存 中。这意味着如果多个包使用相同版本相同依赖项,则它只需要下载并本地存储一次。
默认情况下,系统包缓存位于主目录的 .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 或部署到生产环境很有用。
阅读 为生产环境获取依赖项 了解更多详情。
除非另有说明,否则本网站上的文档反映的是 Dart 3.6.0。页面最后更新于 2025-02-05。 查看源代码 或 报告问题.