记录一次npm包版本为 latest引起的bug

85 阅读2分钟

背景

QA在5.18发现了一个bug:在站内 iOS APP内访问第一次活动页,会出现三四次白屏反复横跳的问题,然后页面可以正常展示;之前访问过活动页,再打开是好的。

问题定位

使用二分查找,尝试找到没有问题的版本。

在beta环境,多次发版历史版本后,定位到了在某一版本(称为n)及之后开始出现这个问题。

review对这一版的代码,尝试去掉有问题的风险点后,发到测试环境问题依旧。

也就是说问题和这一版本的代码无关,那么问题出在哪里呢?

问题不出在业务代码里,就是出在引用的依赖里了。

之前n-1的版本构建出来是没有问题的,对n-1版本重新沟通,发布测试环境发现有问题。OK!明确定位问题出在引用的包更新里了。

在这之前,怀疑问题原因可能是业务代码在站内有报错;或者bridge有报错,导致白屏和横跳。

问题解决

虽然项目有package-lock.json文件,为什么依赖还是悄悄更新了呢?发现项目中package.json里的一些依赖版本号是latest,因此始终安装的最新的。

同时项目中package-lock.json和yarn.lock都存在混用,但是gitlab-ci build时使用的是package-lock.json,里面一部分包没有更新,后续需要避免混用。

继续二分查找定位是哪个依赖的问题,将该依赖锁死版本后,继续发布beta环境验证无误后上线。 并把问题反馈给对应的包的负责人,至此问题结束。

关于npm包的使用规范

  1. 每次在项目目录下执行npm i ,如果没有更新package.json,那么package-lock.json也不会更新
  2. 不要手动更新package-lock.json
  3. 每次更新npm 包,package-lock.json会选择符合配置条件的最新的包
  4. 不要使用latest,有风险