前言

  • 记录下这个巨坑(实质上是正则表达式错误,如果已知问题,想看如何解决直接跳到最后)

问题描述

首先贴上错误信息

在这里插入图片描述

SyntaxError: invalid regexp group
router error:  ChunkLoadError: "Loading chunk chunk-5f403866 failed.
(missing: http://192.168.80.75:8680/static/js/chunk-5f403866.6c0bcd4c.js)"

router error是vue路由捕获到的错误,代码如下
在这里插入图片描述

原因分析

看错误信息,貌似是某一个js文件加载失败了(提示missing)

而最近项目又恰巧的遇到vue打包发布后,出现js文件缓存的问题

所以潜意识的就认为这是由浏览器缓存导致的bug(浏览器缓存了上一个版本的js文件,新版本发布上去后,再次访问报错这种)

解决方案

自以为的缓存问题

接着开始在网上疯狂的找vue发布版如何解决缓存问题,

在index.html中加入以下内容,emmm 没卵用

  <!-- 禁止缓存(作用不大) -->
  <meta http-equiv="Expires" content="0"/> 
  <meta http-equiv="Pragma" content="no-cache"/>
  <meta http-equiv="Cache-control" content="no-cache, no-store, must-revalidate"/>
  <meta http-equiv="Cache" content="no-cache"/>
  <!--  -->

然后又找了nginx如何配置禁止缓存,没用

试了下在router.onError事件里面处理,页面直接无限重新加载

router.onError((error) => {
  // 防IE缓存导致找不到js文件
  const pattern = /Loading chunk \d+ failed/g
  const isChunkLoadFailed = error.message.match(pattern)
  if (isChunkLoadFailed) {
    // 用路由的replace方法,并没有相当于F5刷新页面,失败的js文件并没有从新请求,会导致一直尝试replace页面导致死循环,而用 location.reload 方法,相当于触发F5刷新页面,虽然用户体验上来说会有刷新加载察觉,但不会导致页面卡死及死循环,从而曲线救国解决该问题
    location.reload()
    // const targetPath = $router.history.pending.fullPath;
    // $router.replace(targetPath);
  }

在这里插入图片描述

正则表达式不支持(真实原因)

最后,搜了下SyntaxError: invalid regexp group这个错误,链接

我在一个vue文件里使用到了正则的前置断言表达式,而IE和火狐不支持正则的前置断言表达式(这个错误还会导致报模块加载失败的错误),谷歌浏览器是支持的,而我平时开发又一直用的谷歌浏览器调试…
在这里插入图片描述

修改代码,重新构建一下,问题解决

在这里插入图片描述
心态崩了,咋就没去搜第一个错误提示呢,前端开发还是得多用几个浏览器测。

后语

  • 遇到这个问题也累积一个经验,SyntaxError表示语法错误,这个时候需要检查代码是否写错了
  • 希望这篇文章能帮到遇到此类问题的程序猿们
GitHub 加速计划 / vu / vue
207.53 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 4 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐