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 面向对象编程基础 多态
Aug 21 Javascript
100个不能错过的实用JS自定义函数
Mar 05 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
Jul 12 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
Oct 05 Javascript
Bootstrap表单简单实现代码
Mar 06 Javascript
详解vue中引入stylus及报错解决方法
Sep 22 Javascript
Vue三层嵌套路由的示例代码
May 05 Javascript
Vuejs监听vuex中值的变化的方法示例
Dec 02 Javascript
[jQuery] 事件和动画详解
Mar 05 jQuery
vue实现标签云效果的方法详解
Aug 28 Javascript
使用vue重构资讯页面的实例代码解析
Nov 26 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
Sep 22 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 读取文件内容代码(txt,js等)
2009/12/06 PHP
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
php递归实现无限分类的方法
2015/07/28 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
Vue.use源码分析
2017/04/22 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
浅谈Python基础之I/O模型
2017/05/11 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
python中几种自动微分库解析
2019/08/29 Python
Python循环实现n的全排列功能
2019/09/16 Python
python 实现list或string按指定分段
2019/12/25 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
中英文自我评价常用句型
2013/12/19 职场文书
收银员岗位职责
2014/02/07 职场文书
2014年关于两会精神的心得体会
2014/03/17 职场文书
安全责任书范文
2014/08/25 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2014年工人工作总结
2014/11/25 职场文书
古诗之感恩老师
2019/10/24 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python