You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在React中创建Web Worker报错:Unexpected token '<' 问题求助

解决React中Web Worker报Uncaught SyntaxError: Unexpected token '<'的问题

这个错误的核心原因是浏览器请求worker.js时,拿到的不是预期的JavaScript文件,而是HTML内容(比如项目的index.html页面),文件开头的<html>标签导致语法解析失败。这是因为React项目的打包工具(如Webpack)不会默认处理单独的Worker文件路径,直接使用new Worker('worker.js')会让浏览器去根目录请求该文件,而打包后文件的实际路径与请求路径不匹配,最终返回了HTML页面。

方案一:Create React App 项目(官方推荐写法)

修改App.js中创建Worker的代码,使用URL结合import.meta.url来正确解析Worker文件的路径:

let worker = new Worker(new URL('./worker.js', import.meta.url));
worker.postMessage('Hey!');

worker.onmessage = function(e) {
  console.log('Worker thread says', e.data);
};

这种写法会让Webpack自动处理Worker文件的打包和路径映射,确保浏览器能正确加载到对应的JS文件。

方案二:自定义Webpack配置的项目

如果是自己配置Webpack的React项目,可以通过worker-loader来处理Worker文件:

  1. 安装依赖:
npm install worker-loader --save-dev
  1. 在Webpack配置文件中添加规则:
module.exports = {
  module: {
    rules: [
      {
        test: /\.worker\.js$/,
        use: { loader: 'worker-loader' }
      }
    ]
  }
};
  1. 修改Worker文件名(比如改为worker.worker.js),然后在App.js中导入并创建实例:
import Worker from './worker.worker.js';
let worker = new Worker();

worker.postMessage('Hey!');
worker.onmessage = function(e) {
  console.log('Worker thread says', e.data);
};

额外检查项

  • 确保worker.js与App.js在同一目录下,或者路径书写正确(比如Worker在子目录中时,路径应为./subdir/worker.js)。
  • 检查项目打包后的输出目录,确认Worker文件被正确打包生成。

内容的提问来源于stack exchange,提问作者johnharvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:35:30