Typescript-fejl TP1001 ved oprettelse af en Web Worker i Next.js 15.0.2 med Stockfish skakmotor
Jeg arbejder på et Next.js 15.0.2-projekt med turbopack ved hjælp af TypeScript, og jeg integrerer Stockfish skakmotoren for at oprette en Web Worker på klientsiden.
Stockfish-biblioteket er gemt i public-mappen, og klienten henter det og opretter Workeren med følgende kode:
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-biblioteket indlæses og fungerer perfekt i klienten. Men når jeg kører projektet, får jeg følgende TypeScript-fejl i konsollen:
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) {
Hvad jeg prøvede:
- Webarbejderen bliver oprettet dynamisk, og den fungerer fint, så jeg ser ingen problemer med funktionaliteten.
- Fejlmeddelelsen
TP1001ser ud til at være TypeScript, der klager over, atnew Worker("/stockfish/stockfish-nnue-16-single.js")ikke kan analyseres statisk. - Jeg har prøvet at bruge
// @ts-ignorefor at undertrykke fejlen, men det ser ikke ud til at løse den.
Min opsætning:
- Next.js version: 15.0.2
- TypeScript version: ^5
- Stockfish-bibliotek serveres fra
public-mappen
Hvad jeg har brug for hjælp til:
- Hvorfor viser TypeScript denne fejl, hvis workeren fungerer fint?
- Hvordan kan jeg effektivt løse eller undertrykke denne fejl?
- Er der en bedre måde at indlæse workers dynamisk i Next.js med TypeScript, som undgår denne fejl?
Enhver hjælp eller forslag vil blive meget værdsat!
Svar #1
Jeg havde det samme problem, da jeg brugte Next.js 15 med turbopack, at deaktivere turbopack løste det for mig.
Måske fungerer nogle eller alle arbejdstagere ikke med turbopack (jeg er ikke sikker)
package.json
{
"scripts": {
"dev": "next dev" // remove --turbopack option
}
}
Svar #2
brug window.Worker i stedet for Worker
const worker = new window.Worker(stockfishPath);
Typescript-fejl TP1001 ved oprettelse af en Web Worker i Next.js 15.1.3
