2021.3.25 update:
今天看到一段关于NPM的包管理的版本号说明,感觉和flutter package这块比较像。
版本号
使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下。
语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。
- 如果只是修复bug,需要更新Z位。
- 如果是新增了功能,但是向下兼容,需要更新Y位。
- 如果有大变动,向下不兼容,需要更新X位。
版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。
NPM支持的所有版本号范围指定方式可以查看官方文档。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
问题:
拉出老的release库的代码,发现flutter部分的代码无法编译通过,打不出老的release包。
问题分析:
develop分支flutter库代码中的pubspec.yaml中的版本号都是动态模式。
加了^符号,会默认指向a.b.c 版本号中c的最高位置。
例如: ^0.1.2
如果远端的pub库上的最新版本是0.1.3,那么本地使用的实际最终会是0.1.3。
在自动对齐的过程中,有可能出现一些三方库的api变更,导致flutter编译的时候第三方库指向了最新版本的不同的代码。
解决办法:
把host入口工程的pubspec.lock文件加入到git 版本管理中。打release分支的时候,跟随代码带过去。flutter pub get 会导致pubspec.lock override,所以jenkins上构建,直接flutter build bundle。
关于工程中什么地方应该pubspec.lock ignore?
application packages工程保留。
library packages工程git ignore。