原本上周解决了一个Vue3版本导致打包失败的问题,没想到这周紧跟着来了AndDesignVue的坑,问题也大同小异。
感觉最近是掉进了版本的坑里,就记录下Vue3版本更新导致的打包异常排查吧。
起因
当天下午,前端组的伙伴惊呼“我代码有毒?”,瞅了一下是刚提交PR合并之后,CI工具报错打包部署失败报错。
排查
1、CI工具
首先排除CI工具本身,因为上午还在正常运行,赶紧看看CI报错的日志有些啥
明显看报错中有个 RefImpl class,但是这次PR没有改过package里面的东西,把这段代码放进Google里也没有相关线索。
但是考虑到Vue团队还是比较严谨,每次更新有一系列的测试流程,还是再排查下本身项目代码吧。
2、本地复现
看看本地是否能复现,能的话说明存在代码上的问题。
将CI对应的develop分支拉到本地后开始build,结果发现能正常打包并生成dist,说明1.代码没问题,因为项目采用的TS,进一步说明没有语法上的error;2.环境没问题。
3、本地/CI 区别
OK,目前情况是本地可以而CI不行,CI和本地最大区别是CI每次是npm install重新安装所有依赖。因为package中Vue版本使用的是”^3.0.6”,意味着每次CI安装依赖都是在3.*版本基础上安装最新的,而由于本地使用的yarn.lock确定版本,而CI工具使用的npm,没有package.lock文件。
顺着这个思路找到日志中 Vue 版本,发现为3.1.3,而本地版本为3.1.0。
不出意外 问应该就是出在版本上了。
4、解决
为了验证思路&测试同事等待更新,手动将Vue版本锁定为3.1.2后再次运行CI工具,打包成功。
5、溯源
既然问题出在Vue,就得去Github仓库里一探究竟了。
进仓库一眼看到“3小时前v3.1.3”字眼,这是真得巧,然后进到Issues页面,第一条就是1小时前有人提的关于3.1.3版本build失败的问题。
具体有兴趣的可以看看这条Issue#4052,除了锁定版本外还可以在config里添加对依赖包进行转换,见下图
就在解决完不到半小时后,看到3.1.4版本发布出来了,原来是尤大已经解决掉了这个问题,感受了一把Vue团队的效率。
总结
- CI和本地尽量采用同一套包管理工具(Yarn/Npm)
- 可以关注项目中用到的插件或者库的版本更新及ChangeLog
- 在项目正常快速迭代时期可以锁定版本,以保证不同场景下版本一致,在比较稳定之后再考虑进行升级,因为小版本里也会有存在Break change导致各种异常(这点在这周处理AntDesignVue组件库bug的时候也正好遇到)