vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错


Posted in Javascript onNovember 06, 2018

前言: 项目使用vue-cli版本2.9.3 ,vue-router使用webpackChunkName实现按需加载.

vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错

BUG描述:该报错在项目上线一段时间后,有用户反映页面无法正常游览 (后面以问题1/问题2区分)

问题1.导航点击无法正常跳转,console打印:Error:Loading chunk {n} failed.

报错截图vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错

问题2.页面全白,console打印:Uncaught SyntaxError:Unexpected token <

报错截图: vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错

经过一番折腾,初步定位问题1在经过build/webpack.prod.conf.jschunkhash打包后的JS文件hash值会有变更,因为每次更新代码到线上都会删除旧的dist目录,将最新的dist目录copy上传提供后台更新. 在更新代码的这个过程用户停留在页面上,当用户在更新完后重新操作就会导致报错

vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错

问题1解决方法:捕获路由报错. (思路来源:https://3water.com/article/147427.htm)

routers.onError((err) => {
 const pattern = /Loading chunk (\d)+ failed/g;
 const isChunkLoadFailed = err.message.match(pattern);
 if (isChunkLoadFailed) {
  let chunkBool = sessionStorage.getItem('chunkError');
  let nowTimes = Date.now();
  if (chunkBool === null || chunkBool && nowTimes - parseInt(chunkBool) > 60000) {//路由跳转报错,href手动跳转
   sessionStorage.setItem('chunkError', 'reload');
   const targetPath = routers.history.pending.fullPath;
   window.location.href = window.location.origin + targetPath;
  }else if(chunkBool === 'reload'){ //手动跳转后依然报错,强制刷新
   sessionStorage.setItem('chunkError', Date.now());
   window.location.reload(true);
  }
 }
})

问题2在Network查看js文件加载的时候发现某个js文件Response Headercontent-type异常,正常情况返回content-type: application/javascript. 但是有一个js响应的内容为HTML, js无法识别<符号导致抛出报错

vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错

vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错

问题2目前还在与后台商量如何解决,解决后会更新解决方法分享.有同学遇到同样的问题可以一起讨论或提出更好的解决方案参考学习.★★★

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript jQuery $.post $.ajax用法
Jul 09 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
拥抱模块化的JavaScript
Mar 07 Javascript
window.open 以post方式传递参数示例代码
Feb 27 Javascript
javascript实现des解密加密全过程
Apr 03 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
Jul 01 Javascript
JavaScript判断变量是否为数组的方法(Array)
Feb 24 Javascript
js 定位到某个锚点的方法
Nov 19 Javascript
AngularJS实现根据不同条件显示不同控件
Apr 20 Javascript
Bootstrap实现的表格合并单元格示例
Feb 06 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
Sep 19 Javascript
layui 上传图片 返回图片地址的方法
Sep 26 Javascript
100行代码实现一个vue分页组功能
Nov 06 #Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 #Javascript
Vue递归实现树形菜单方法实例
Nov 06 #Javascript
electron中使用bootstrap的示例代码
Nov 06 #Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 #Javascript
浅谈Vue数据响应思路之数组
Nov 06 #Javascript
Vue项目中最新用到的一些实用小技巧
Nov 06 #Javascript
You might like
PHP安装攻略:常见问题解答(一)
2006/10/09 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
innerHTML在IE中报错解决方案
2014/12/15 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
python3中函数参数的四种简单用法
2018/07/09 Python
python线程的几种创建方式详解
2019/08/29 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
python常用排序算法的实现代码
2019/11/08 Python
Django models文件模型变更错误解决
2020/05/11 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
志愿者活动总结范文
2014/04/26 职场文书
公司募捐倡议书
2014/05/14 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL