Vue项目中使用web worker报错 Uncaught SyntaxError: Unexpected token <

(耗时两个小时的排错之路…)

Bug

在代码中直接使用worker会报错,如下图所示
在这里插入图片描述

Solution

初步排查是路径问题,实例化Worker的时候没有找到相应的worker文件。

排查思路: 根据worker的error信息发现filename为worker.js的文件无法在source中找到…

  • 使用worker-loader
    • npm install -D worker-loader

然后在vue.config.js中添加worker-loader的配置,不是vue-cli 3.0的在build文件夹下找到相应的webpack配置文件进行修改

以下为vue.config.js的修改

  //添加web worker loader
  configureWebpack: config => {
    config.module.rules.push({
      test: /\.worker\.js$/,
      use: {
        loader: 'worker-loader',
        options: { inline: true }
      }
    })
  },

在这里插入图片描述
在实例化worker的代码中使用这样的代码去实例化:

import Worker from './export.worker' //此处worker-loader在打包时会导出一个Worker包裹的函数

  const worker = new Worker()
  worker.postMessage('begin')
  worker.onmessage = e => {
    console.log('get worker result ', e.data)
    worker.terminate()
  }
  worker.onerror = e => {
    console.log('something error with export.worker.js', e)
  }


跨域策略

前文中的配置之前由于(我)没写inline导致项目在运行时一直继续报Uncaught SyntaxError: Unexpected token <的错误,一直没有头绪。排查过程中发现一些很有意思的现象:

  • 在项目运行阶段,拖动worker.js文件,通过热更新发现worker是可以运行的,但是重启项目就没有了
  • 项目build之后会产生[hash].worker.js这个文件,但是dev运行的项目在浏览器source中无法找到这个文件
  • 一度怀疑是vue路由拦截了js文件的获取,不过测试发现在地址栏输入app.js的路径发现能够正常获取

一直没搞清楚问题的成因,于是又去翻一翻已经看过好几遍的worker-loader文档,之前一直看的英文的,这次找了个中文的来看,果然找到了问题根源所在!
在这里插入图片描述
参考文章:
https://github.com/webpack-contrib/worker-loader
https://webpack.docschina.org/loaders/worker-loader/

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue项目,当在引入第三方依赖的JS文件时,可能会遇到报错信息"Uncaught SyntaxError: Unexpected token <"。这个错误通常是由于引入的JS文件路径错误导致的。在控制台会提示这个错误,并且指出具体的文件和位置。 根据引用的描述,可能是因为在index.html文件引入的JS文件路径不正确。原本的JS文件应该放在/src/utils文件夹下,但是引入的路径却是/src和/static。这种情况下,浏览器会认为引入的是一个HTML文件而不是JS文件,从而导致了"Uncaught SyntaxError: Unexpected token <"的错误。 解决这个问题的方法是确保引入的JS文件的路径是正确的。可以检查index.html文件,确保引入的路径与实际文件所在的路径相匹配。将路径修改为/src/utils文件夹下的JS文件路径即可避免这个错误的发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue项目报错Uncaught SyntaxError: Unexpected token <](https://download.csdn.net/download/weixin_38593823/12949934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vue项目报错Uncaught SyntaxError: Unexpected token](https://download.csdn.net/download/weixin_38697328/14820887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [浏览器显示数据库数据的条形图柱状图 前后端分离vue.js+spring boot 计算机软件工程课程设计毕业设计 ...](https://download.csdn.net/download/Amzmks/88275824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值