Flutter工程代码管理 pubspec.yaml、.pubcache 与 pubspec.lock文件的使用注意事项

简单介绍总结下这三个文件的作用

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文件并打开,如图:


截屏2021-11-16 17.56.18.png

以工程为例,依赖第三方库的设置方式为fluttertoast ^3.1.0^的意思为大于等于3.1.0小于4.0.0,若需要设置指定版本,最佳的设置方式为fluttertoast 3.1.0,即指定固定版本,无论使用pub get还是pub upgrade都不能让其版本变更。

pub getpub upgrade的使用

pub get(类似iOS里的pod install) 和 pub upgrade (类似iOS里的pod update)之间的主要区别是:如果lock文件已经存在,pub get使用指定的依赖的版本或者.pubcache里的缓存版本。如果一个依赖项没有被指定,pub upgrade将获得满足所有版本约束的那个依赖项的最新版本。这是pub getpub 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.yaml和pubspec.lock没有改变的情况下,git工具会从缓存文件里寻找最近的代码导入到工程,并不会拉取依赖库或者插件最新代码。解决办法主要有以下两种:
1.在pubspec.yaml中使用commit号,pub get命令拉取到所需要的代码(若不想使用commit号,就想使用分支的话,可恢复pubspec.yaml文件)。此时pubspec.lock文件也有相应的变更,然后上传pubspec.lock文件。如下图所示:

截屏2021-11-17 11.41.38.png

拉取代码后的pubspec.lock文件也会有相应变更,如图:

截屏2021-11-17 11.41.18.png

2.找到.pubcache文件,再找到对应的依赖库文件,然后删除相应的依赖库或者插件。再使用pub get命令,因为没有缓存,git工具会拉取依赖库或者插件指定分支上的最新代码。提倡使用第一种方法,简单方便。

你可能感兴趣的:(Flutter工程代码管理 pubspec.yaml、.pubcache 与 pubspec.lock文件的使用注意事项)