vue报错:Uncaught SyntaxError: unexpected token *

今天项目碰到项目在chrome49版本下报Uncaught SyntaxError: unexpected token *错误,但是在高版本下又一切正常。真是一脸的蒙圈,赶紧各种的百度。
资料一:
控制台的提示: Uncaught SyntaxError: Unexpected token <
按照提示进入文件,再看如下图:
仔细看了看 index.html 文件,发现原本我的 JS 文件是放在 /src/utils 文件夹下的,但引入 /src 和 /static 的文件是有区别的。
解决方案:
解决办法是将第三方依赖的 JS 文件放到 /static/utils 目录下,引入路径也改成:<script src="./static/utils/sockjs.js"></script>,这样就不报错了!
总结:
1、assets文件夹与static文件夹的区别
区别一:assets文件是src下的,所以最后运行时需要进行打包,而static文件不需要打包就直接放在最终的文件中了
区别二:assets中的文件在vue中的template/style下用../这种相对路径的形式进行引用,在script下必须用@import的方式引入而static下的文件在.vue中的任何地方都只要使用../这种相对路径的方式引入,
2、 (1)assets用来放置样式、静态图片,只要src下面的组件中用到的资源就放在assets中。
(2)static用来放没有npm包的第三方插件,字体文件。
(3)assets与components同级 components下的.vue引用静态文件时,相对路径为 ../assets/wapFront
3、vue如何引入其它静态文件:
(1)src目录下的资源只能import或require。
(2)想静态引入的话,建立一个与src同级的目录例如static,然后把静态资源放入该文件夹下,html的引入路径如下:./static/...(注:试过一定要放在static文件夹下,否则报错)
 
资料二:
 

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

BUG描述:该报错在项目上线一段时间后,有用户反映页面无法正常游览 (后面以问题1/问题2区分)
问题1.导航点击无法正常跳转,刷新后恢复正常. console打印: Error:Loading chunk {n} failed.
报错截图
问题2.页面全白,并且刷新仍然无效. console打印: Uncaught SyntaxError:Unexpected token <
报错截图:
经过一番折腾,初步定位问题1在经过 build/webpack.prod.conf.js chunkhash 打包后的JS文件hash值会有变更,因为每次更新代码到线上都会删除旧的dist目录,将最新的dist目录copy上传提供后台更新. 在更新代码的这个过程用户停留在页面上,当用户在更新完后重新操作就会导致报错
问题1解决方法:捕获路由报错. (思路来源: https://segmentfault.com/a/11...  )
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 Header content-type异常,正常情况返回 content-type: application/javascript . 但是有一个js响应的内容为HTML, js无法识别<符号导致抛出报错
 
 

 

问题2解决方法: 经过问题排查发现,vue-cli默认build后的文件名格式为 js/[name].[chunkhash].js ,每次 npm run build 后有改动的文件hash值都会改变,上传后Nginx无法找到最新上传的文件,所以返回了默认 index.html 里的内容,我们的文件后缀名是 .js 自然无法识别 <html> 这种标签符号,导致console抛出 Uncaught SyntaxError:Unexpected token < ,我尝试修改 build/webpack.prod.conf.js output输出文件名格式,目前问题已得到解决
 
资料三:
 
 

Vue打包后放到服务器出现Loading chunk {n} failed 错误

解决办法:
我们需要给路由加一个错误的回调方法,在监听到路由报错之后进行页面刷新操作,这时就可以获取到当前最新的代码来解决报错问题。

 

/* 路由异常错误处理,尝试解析一个异步组件时发生错误,重新渲染目标页面 */
 
router.onError((error) => {
 
const pattern = /Loading chunk (\d)+ failed/g;
 
const isChunkLoadFailed = error.message.match(pattern);
 
const targetPath = router.history.pending.fullPath;
 
if (isChunkLoadFailed) {
 
router.replace(targetPath);
 
}
 
});
资料四:
 
应该是打包之后路由路径处理问题,建议修改build和config目录下的配置文件配置属性:publicPath:‘/’,这个最好是将研发、测试和生产环境的都修改掉,重新打包,查看各个环境的路由跳转是否正常即可。
比如我在我的项目里面是这样:
1.build目录
q6isRdtoxH8AAAAASUVORK5CYII=uploading.4e448015.gif正在上传…重新上传取消
image.png 713×203 21.1 KB
2.config各个环境下的:
----------------------------------
查询了这么多资料之后,开始解决问题:
Uncaught SyntaxError: Unexpected token *,就是说这是无法解释的语法错误。看了network里所有的资源都正常引入,就大胆的假设是哪里的代码有问题,导致死循环,于是开始屏蔽掉各种不相干的代码。最后的最后定位到了swiper的引入。也许是因为swiper是用于移动端的,所以在pc端的低版本浏览下存在兼容问题
把swiper的引入屏蔽掉一切正常,一旦放开就无法正常运行,显然就是这个插件的引入导致了这个页面的链接无法正常的显示。到此算是问题已经找到了。记录下以免下次遇到继续的蒙圈。
由此也发现错误提示信息的重要性,有的时候报错信息一经明确得给出了出问题的原因。准确分析分析、才能快速的解决问题。
这里仅是本人的个人见解,如果有不对的地方期待大佬的赐教
 
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 这个错误提示是由于在vue项目中使用了不支持的语法。"uncaught syntaxerror: unexpected token *" 的意思是遇到一个意外的 * 符号导致语法错误。 * 在JavaScript中通常表示乘法操作符或者扩展运算符。在vue中,可能会出现以下几种情况导致该错误: 1. 语法错误:在某个地方可能缺少了分号或者括号,导致解析错误。可以仔细检查代码的语法是否正确。 2. 解构赋值:在解构赋值语法中,* 表示剩余项。如果你尝试在vue项目中使用了类似的解构赋值语法,可能会引发该错误。可以通过修改代码来避免这个问题。 3. Babel配置错误:如果你使用了Babel来转译代码,可能是Babel的配置有问题导致这个错误。你可以仔细检查Babel的配置文件,确保所有的插件和预设被正确设置和加载。 综上所述,当你在vue项目中遇到"uncaught syntaxerror: unexpected token *"的错误时,需要仔细检查代码中的语法错误、解构赋值语法和Babel配置等方面是否存在问题,并逐一排除可能引起错误的原因。 ### 回答2: 这个错误是因为在Vue项目中出现了未预期的“*”符号,导致语法错误。出现这个错误的原因可能有几种情况: 1. 版本不匹配:如果你的Vue项目中使用的版本与你的代码所用的Vue版本不匹配,可能会导致这个错误。你可以尝试升级或降级Vue的版本以解决这个问题。 2. 语法错误:你的代码中可能存在语法错误,比如在不正确的地方使用了“*”符号。请仔细检查你的代码,确保没有输入错误。 3. 依赖问题:如果你的项目依赖的某些库或插件与你的代码产生了冲突,也可能导致这个错误。请检查你的依赖项,并查看是否更新或更换某些库可以解决问题。 要解决这个错误,你可以按照以下步骤进行操作: 1. 检查Vue版本:确保你的Vue项目中使用的版本与你的代码所用的Vue版本匹配。 2. 仔细检查代码:检查你的代码,特别是与“*”相关的部分,确保没有语法错误或输入错误。 3. 更新或更换依赖项:检查你的依赖项,如果发现与“*”相关的库或插件存在冲突,尝试更新或更换它们。 总之,这个错误是由于在Vue项目中出现了未预期的“*”符号导致的语法错误。要解决这个问题,你可以检查Vue版本、仔细检查代码以及更新或更换依赖项。希望对你有所帮助! ### 回答3: 如果在线的Vue项目报告了"Uncaught SyntaxError: Unexpected token *"错误,这可能是因为在不支持的JavaScript版本中使用了ES6的新特性。 该错误通常是由于浏览器版本不支持ES6语法导致的。问题的根本原因是你的浏览器不支持"*"这个特殊的语法标记。 为了解决这个问题,你有几个选项: 1. 升级你的浏览器版本:确保你的浏览器是最新的,并且支持ES6语法。你可以从浏览器的官方网站上下载最新版本。 2. 使用Babel来转译代码:Babel是一个流行的JavaScript编译器,可以将ES6语法转换为ES5,这样它就可以在旧版本的浏览器上运行。 3. 修改代码以避免使用不支持的语法:查看你的代码中是否使用了ES6中的新特性,如箭头函数、解构赋值、模板字符串等。如果是的话,可以尝试使用旧的JavaScript语法替代。 总结一下,"Uncaught SyntaxError: Unexpected token *"错误是由于你的浏览器不支持ES6语法而引起的。你可以通过升级浏览器、使用Babel转译代码或修改代码来解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值