使用 Stockfish 国际象棋引擎在 Next.js 15.0.2 中创建 Web Worker 时出现打字稿错误 TP1001

问题描述 投票:0回答:1

我正在使用 TypeScript 开发带有 Turbopack 的 Next.js 15.0.2 项目,并且我正在集成 Stockfish 国际象棋引擎以在客户端创建 Web Worker。

Stockfish库存储在

public
文件夹中,客户端获取它并使用以下代码创建Worker:

const stockfishPath = '/stockfish/stockfish-nnue-16-single.js';

const createStockfishWorker = () => {
  try {
    const worker = new Worker(stockfishPath);
    return worker;
  } catch (error) {
    throw Error(`Initialize stockfish worker failed: ${error}`);
  }
};

export default createStockfishWorker;

Stockfish 库在客户端中加载并完美运行。但是,当我运行该项目时,我在控制台中收到以下 TypeScript 错误:

GET /analysis/w 200 in 2089ms
⚠ ./src/services/stockfish/createStockfishWorker.ts:7:20
error TP1001 new Worker("/stockfish/stockfish-nnue-16-single.js") is not statically analysable
   5 | const createStockfishWorker = () => {
   6 |   try {
>  7 |     const worker = new Worker(stockfishPath);
     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^
   8 |     postMessage(['uci'], worker);
   9 |     return worker;
  10 |   } catch (error) {

我尝试过的:

  • Web Worker 是动态创建的,并且工作正常,因此我没有看到任何功能问题。
  • 错误消息
    TP1001
    似乎是 TypeScript 抱怨
    new Worker("/stockfish/stockfish-nnue-16-single.js")
    不可静态分析。
  • 我尝试使用
    // @ts-ignore
    来抑制错误,但似乎没有解决问题。

我的设置:

  • Next.js版本:15.0.2
  • TypeScript 版本:^5
  • Stockfish 库 正在从
    public
    文件夹
  • 提供服务

我需要帮助:

  • 如果工作线程工作正常,为什么 TypeScript 会显示此错误?
  • 如何有效解决或抑制此错误?
  • 有没有更好的方法可以使用 TypeScript 在 Next.js 中动态加载工作线程来避免此错误?

任何帮助或建议将不胜感激!

typescript next.js worker stockfish turbopack
1个回答
0
投票

我在使用带有 Turbopack 的 Next.js 15 时遇到了同样的问题,禁用 Turbopack 为我解决了这个问题。
也许一些或所有工人不使用涡轮机组(我不确定)

package.json

{
  "scripts": {
    "dev": "next dev" // remove --turbopack option
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.