flutter项目pubspec.yaml和pubspec.lock之间的关系

pubspec.yaml:是依赖版本的第一个配置文件;

pubspec.lock: 是依赖版本的第二个配置文件;作用是根据pubspec.yaml配置生成的具体依赖版本;

为什么会有2个版本依赖配置呢?

举个例子:

1、pubspec.yaml中的这个插件为:

sqflite: ^2.2.2

2、执行flutter pub get,对应pubspec.lock为:

sqflite:
  dependency: "direct main"
  description:
    name: sqflite
    url: "https://pub.flutter-io.cn"
  source: hosted
  version: "2.2.8+4"

3、这个时候出现的版本2.2.8+4和实际配置的2.2.2不一样,原因是就使用^导致,它的作用代表:2.2.2——3.0.0之间的版本,只要服务器有更新,每次你执行flutter pub get命令的时候,都会实时更新,这样可能会引发2次编译版本依赖不一样,导致不可预知的错误。

扫描二维码关注公众号,回复: 15576260 查看本文章

4、解决方法:

可以pubspec.yaml写死配置:sqflite: 2.2.2,这样就不会自动更新版本,以后有需要再手动更新。

对应的pubspec.lock为:

sqflite:
  dependency: "direct main"
  description:
    name: sqflite
    url: "https://pub.flutter-io.cn"
  source: hosted
  version: "2.2.2"

5、关于^的作用说明:

^0.0.1:0.0.1——0.0.2之间的版本;

^0.1.0:0.1.0——0.2.0之间的版本;

^1.0.0:1.0.0——2.0.0之间的版本;

6、pubspec.lock需要加到.gitignore文件中去,不需要提交到服务,因为每次执行flutter pub get的时候会自动生成。如果生成的名称没有_ios结尾的,只有_foundation,则需要把本地的fluuter sdk升级到3.0版本以上,否则在studio上运行会报错,如下图:

猜你喜欢

转载自blog.csdn.net/szdenny/article/details/131224815