dart pub get 命令
使用 dart pub get 命令检索 Dart 应用使用的依赖项。
Get 命令是 Pub 工具 中的一个命令。
$ dart pub get [options]
该命令获取所有在当前工作目录下的
pubspec.yaml
文件中列出的依赖项,以及这些依赖项的
间接依赖项Transitive dependencyA dependency that a package indirectly uses because
one of its dependencies requires it.
Learn more。例如:
dart pub get
Resolving dependencies...
Got dependencies!
如果
Pub 的系统缓存Pub system cacheA directory where pub stores downloaded remote
packages.
Learn more
中还没有该依赖项,则
dart pub get
命令会在必要时下载该依赖项并更新缓存。该命令会在
.dart_tool/ 文件夹下创建一个
package_config.json 文件并将之映射到 Pub
的系统缓存中。
一旦依赖获取完毕,就可以在 Dart 代码中引用。例如,假如
package 依赖了名为 test 的
package,则可以使用该 package 下的资源:
import 'package:test/test.dart';
dart pub get 命令获取新依赖项后会写入一个
lockfileLockfileA file named pubspec.lock that specifies the versions
of each dependency.
Learn more
文件以确保下次执行该命令时会使用相同的依赖项版本。
应用型的 packageApplication packageA Dart package that contains a runnable application.
Learn more
应该总是签入该 lockfile 文件以控制来源;从而确保在将 package
部署到生产环境时所有的依赖项对于所有开发者而言都是相同的版本。库类型的
package 则不需要签入 lockfile
文件,因为它们可能需要使用到不同的依赖项版本。
如果 lockfile 已经存在,dart pub get
命令会尽可能地使用锁定的依赖项版本。如果某个依赖项没有被锁定,则
pub 会获取所有
限定的版本Version constraintA constraint associated with each dependency that
specifies which versions a package is expected to work
with.
Learn more
中最新的那个依赖项版本。这是
dart pub get 命令与
dart pub upgrade
命令最大的不同点,后者总是会去尝试使用依赖项的最新版本。
Package 解析
#
默认情况下,pub 会在
.dart_tool/ 文件夹下创建一个
.packages 文件用于映射 package 名到位置 URI。
获取一个新的依赖项
#
如果在执行 dart pub get 命令前将某个依赖添加至
pubspec
文件中,则在执行该命令后会更新依赖项以及其间接依赖的其它依赖项。但是,pub
不会更改哪些已经存在的依赖项除非有必要获取它们的新版本。
移除一个依赖项
#
如果在 dart pub get 命令前从 pubspec
文件移除了某个依赖项,则在执行该命令后代码使用到该依赖项的相关导入将变得不可用。所有该依赖项依赖的间接依赖项也同时会被移除,只要这些间接依赖项没有没其它的依赖项所依赖。移除某个依赖项不会对已经获得的依赖项版本产生任何影响。
系统 Package 缓存
#依赖项通过网络从类似 Git 仓库和 Pub 网站 下载并存储在一个 系统级的缓存Pub system cacheA directory where pub stores downloaded remote packages. Learn more 中。这意味着如果多个 Package 使用了相同依赖项的相同版本,它就不再需要通过网络下载,而仅仅只需从本地缓存获取即可。
默认情况下,Pub 缓存存储在你的用户目录(macOS 和 Linux)或
%APPDATA%\Pub\Cache 目录下的
.pub-cache 子目录中(Windows,不同版本的
Windows 操作系统可能会不一样)。你可以在运行 Pub
相关命令前通过
PUB_CACHE
系统环境变量配置你想要的缓存存储目录。
离线检索
#
在没有网络的情况下你也依然可以运行
dart pub get 命令。因为 pub 会将 Package
下载到一个统一的缓存区并将其与系统上其它的 package
进行共享,如果你所需的 package 是一个使用频率很高的
package,那么很有可能它已经被其它 package
在使用时下载到统一缓存区中了,此时你可以直接依赖使用它。
但是,默认情况下,dart pub get
命令会总是尝试获取线上的依赖版本,因此 pub
可以确定依赖项是否有更新的版本。如果你不想 pub
去线上检查,可以使用
--offline
命令参数让该命令在离线模式下执行。在离线模式下,pub
只会从本地缓存区查找已经下载到的可用 Package。
切记 pub 会生成一个 lockfile
文件。如果缓存中某些依赖项目有且只有一个版本且非常旧,离线模式下执行
dart pub get
命令则依然会使用那些旧的版本。下次当你有可用的网络时,可以使用
dart pub upgrade
命令将其更新到最新版本。
选项
#你可以查阅 全局选项 获取 pub 命令所支持的命令选项。
--[no-]offline
#
默认情况下,pub 会从网络上拉取 package
(--no-offline)。若你想使用本地的 package,使用
--offline 参数。想了解更多细节,请查看
离线获取 package.
--dry-run 或 -n
#
打印出可能变化的依赖,但不会实际作出更改。如果你想要在变更前进行分析,该命令非常有用。
--[no-]precompile
#
默认情况下,pub 将预编译直接依赖的 package 中的可执行文件
(--precompile)。若你不需要预编译,请使用
--no-precompile。
--[no-]example
#
默认情况下,pub 还会检索
example/ 目录
的依赖项 (--example)。若要跳过检索 example
的依赖项,请使用 --no-example。
--enforce-lockfile
#
强制解析当前的 pubspec.lock。
如果 pubspec.lock 没有准确指定
pubspec.yaml 的有效解析结果,或者任何托管
package 的内容哈希值发生变化,则会在执行
pub get 时失败并抛出错误信息。
适用于 CI 或部署到生产环境中。
请查阅 获取生产所需的依赖项 了解更多详情信息。