2024.11 一次线上问题引发的思考

一次线上问题引起的思考

npm i 的时候使用@符号指定特定的版本,不会自动更新

最近遇到一个因为包更新导致的线上问题,起因是因为因为在开发过程中为了解决测试环境的构建报错问题,我错误将删除了本地的node_modules以及package-lock.json文件,并将其进行了上传。同时又因为package.jsonvue-router的版本没有锁定,因此导致无意间将vue-router版本从vue-router3.1.6更新成了vue-router3.6.5

包版本更新后,本次开发的功能是没问题,影响到了之前的页面,导致页面白屏,页面卡死。

当然主要原因是因为更新了包版本,次要原因是因为代码写的不够健壮,代码执行报错之后阻止了页面挂载,而vue-router3.1.6vue-router3.6.5对于错误处理的callback函数处理有差异。发现之前的vue-router版本的callback函数异步执行的,现在是同步执行的,遇到页面报错后直接阻止组件挂载了,阻止页面挂载后导致页面白屏。

知识盲点:

package.json什么情况下会自动升级版本?

  • 使用默认额度版本控制符号,当package.json中指定了一个版本号如2.1.0时,当有2.2.0的更新时,npm会自动安装这个新版本,如果库更新到3.0.0,则不会自动升级
  • 使用\~符号:\~符号更新的范围更新,当package.json中指定了\~2.1.0,当有2.1.1的更新时,npm会自动安装这个新版本,2.2.0的版本则不会自动更新。
  • 不使用任何控制符号:会根据指定的版本进行安装,无论何时都不会自动升级。

锁文件package-lock.json有什么用?

package-lock.json文件在安装npm包时会记录每个包的精确版本和来源,确保每次使用npm i时都能安装相同版本的包,避免因为版本不同而导致的问题。

记录node_modules文件夹的树状结构,从而加快npm install的速度。

是在npm install时自动生成的,用于记录当前状态下项目中实际安装的各个package的版本号、模块下载地址、以及这个模块又依赖了哪些依赖。

什么情况下可以动package-lock.json文件?

  • package.json有更新的时候可以更新
  • 当本地和远程代码有冲突的时候以master为准

node-sass是个什么鬼?

node-sassnodejs版本相关联

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容