简单介绍总结下这三个文件的作用
pubspec.yaml: Dart包的配置文件,管理 Flutter 工程代码的依赖,比如第三方库、Dart 运行环境、Flutter SDK 版本都可以通过它来进行统一管理。所以,pubspec.yaml 与 iOS 中的 Podfile 在功能上是类似的。
.pubcache: 用于管理Pub的本地Package 存。使用`pub cache add`命令将新的 Package 添加至缓存。也可以使用`pub cache repair`命令将Package从缓存中清除并重新安装。
pubspec.lock: 自动创建 pubspec.lock 文件,pubspec.lock 文件的作用类似 iOS 的 Podfile.lock文件,用于记录当前状态下实际安装的各个直接依赖、间接依赖的包的具体来源和版本号。
pubspec.yaml的使用
打开工程,找到pubspec.yaml文件并打开,如图:
以工程为例,依赖第三方库的设置方式为fluttertoast ^3.1.0
,^
的意思为大于等于3.1.0小于4.0.0,若需要设置指定版本,最佳的设置方式为fluttertoast 3.1.0
,即指定固定版本,无论使用pub get
还是pub upgrade
都不能让其版本变更。
pub get
和pub upgrade
的使用
pub get
(类似iOS里的pod install) 和 pub upgrade
(类似iOS里的pod update)之间的主要区别是:如果lock文件已经存在,pub get
使用指定的依赖的版本或者.pubcache
里的缓存版本。如果一个依赖项没有被指定,pub upgrade
将获得满足所有版本约束的那个依赖项的最新版本。这是pub get
和pub upgrade
之间的主要区别,pub upgrade
它总是尝试获取所有依赖项的最新版本。一般来讲,不提倡使用pub upgrade
命令,因为使用新版本的第三方库可能会带来不可预知的问题,譬如新版本API的变更、编译报错以及app发布后上线后崩溃率增加(也有可能减少)等。不得不使用pub upgrade
的时候,确保只更改所需要更改的依赖库或者插件代码。
pubspec.lock
的使用
pubspec.lock
在多人开发协作中有很重要的作用,譬如开发人员a使用了新的依赖库或者更新了插件代码后, pubspec.lock
会变更相应的版本号或者commit号,将pubspec.lock
上传后,开发人员b拉取新到新的pubspec.lock
文件后,使用Pub get
命令就会自动获取新的依赖库或者更新了插件代码。如果不上传pubspec.lock
文件,开发人员b可能就会碰到依赖库版本不一致、编译报错的问题。
开发中常见的问题
开发人员经常在开发过程中碰到使用pub get
命令后没有拉取到最新代码的问题,所以不得不使用pub upgrade
命令,如上文所述,不提倡使用pub upgrade
命令。那怎样解决这个问题呢?之所以产生这个问题,是因为依据缓存优先的策略,有缓存则优先使用缓存,在pubspec.yam
l和pubspec.lock
没有改变的情况下,git工具会从缓存文件里寻找最近的代码导入到工程,并不会拉取依赖库或者插件最新代码。解决办法主要有以下两种:
1.在pubspec.yaml
中使用commit号,pub get
命令拉取到所需要的代码(若不想使用commit号,就想使用分支的话,可恢复pubspec.yaml
文件)。此时pubspec.lock
文件也有相应的变更,然后上传pubspec.lock
文件。如下图所示:
拉取代码后的pubspec.lock
文件也会有相应变更,如图:
2.找到.pubcache
文件,再找到对应的依赖库文件,然后删除相应的依赖库或者插件。再使用pub get
命令,因为没有缓存,git工具会拉取依赖库或者插件指定分支上的最新代码。提倡使用第一种方法,简单方便。