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

为何React应用中的Web Worker文件必须放在public目录?

React中Web Worker移至public目录解决语法错误的原因

在React应用中使用Web Worker时,若遇到以下错误:

Uncaught SyntaxError: Unexpected token '<' (at worker.js:1:1)

将worker.js移至项目的public目录即可解决问题,具体原因如下:

1. React项目的资源处理逻辑差异

React项目(基于Webpack/Vite等构建工具)对src和public目录的处理规则完全不同:

  • src目录下的文件会被构建工具解析、编译、打包,最终输出到构建产物的特定路径中,不会保留原文件的路径和文件名映射。
  • public目录属于静态资源目录,其中的文件会被服务器原样托管,请求路径直接对应文件在public中的位置,不会经过构建工具的编译处理。

2. 错误的核心原因

当worker.js放在src目录时,执行new Worker("worker.js")会让浏览器向当前页面的相对路径发起请求,但此时服务器找不到对应路径的静态文件(src下的文件已被构建工具处理,原路径不存在),会返回React应用的入口index.html文件。而HTML文件的第一个字符是<,Worker尝试将其当作JS解析时,就会触发Unexpected token '<'的语法错误。

3. 移至public目录的作用

将worker.js放到public目录后,浏览器请求worker.js时,服务器会直接返回该文件的原始JS内容,Worker可以正确解析执行,自然不会再出现语法错误。

相关代码示例

App.js

import React from "react";

const App = () => {
  console.log("hey");
  const worker = new Worker("worker.js");
  return <div>App</div>;
};

export default App;

worker.js

console.log("work");

效果对比

  • 有效情况:
    Working
  • 无效情况(触发错误):

Uncaught SyntaxError: Unexpected token '<' (at worker.js:1:1)
Not Working

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:01:47