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
,则该依赖项不再可用于导入。只要没有剩余的直接依赖项也依赖于已删除的依赖项,则还会删除已删除依赖项的任何传递依赖项。删除依赖项永远不会更改任何已获取的依赖项的版本。
系统包缓存
#通过 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 或部署到生产环境非常有用。
阅读为生产环境获取依赖项以获取更多详细信息。
除非另有说明,否则本网站上的文档反映了 Dart 3.6.0。页面上次更新时间为 2024-12-10。 查看源代码 或报告问题。