Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

can't import web-worker inside a NodeJS worker thread with no workerData

Aberta
#57 1 comentário 3 reações 0 responsáveis Ver no GitHub

@DerZade já está trabalhando nisso.

Desde 9/4/2026.

  • #58 de @DerZade — aberto

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
62/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Pouca atividade
Stack de tecnologia
javascript, node.js
Domínio
backend

Direção de pesquisa

Execute primeiro a reprodução fornecida com main.js e worker.js e, em seguida, inspecione src/node/index.js em torno de workerThread na linha 141 e o caminho de importação relacionado. Está concluído quando importar web-worker dentro de uma worker thread NodeJS não relacionada, com workerData undefined, não lançar mais uma exceção, enquanto o comportamento próprio de worker-thread da biblioteca permanece intacto.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Simply having an import to web-worker inside a NodeJS worker thread with no workerData will result in the following error:

node:internal/event_target:1101
  process.nextTick(() => { throw err; });
                           ^
TypeError [Error]: Cannot destructure property 'mod' of 'threads.workerData' as it is undefined.
    at workerThread (file:///home/jonas/projects/temp/web-worker-in-worker-test/node_modules/web-worker/src/node/index.js:141:8)
    at file:///home/jonas/projects/temp/web-worker-in-worker-test/node_modules/web-worker/src/node/index.js:75:94
    at ModuleJob.run (node:internal/modules/esm/module_job:345:25)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:651:26)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5)

Node.js v22.19.0

Reproduction

main.js
import { Worker } from 'node:worker_threads';

const worker = new Worker('./worker.js', {});
setTimeout(() => worker.terminate(), 1000);
worker.js
import { parentPort } from 'node:worker_threads';
import Worker from 'web-worker';

parentPort.addEventListener('message', e => {
    // omitted for brevity, as it is not relevant
});

Notes

I saw that #40 tried to fix this issue already, but didn't fix it completely. The fix assumes workerData is set to a value. If it is undefined, we still run into the same issue as described in #40:

[...] When using this library within a worker thread, the workerThread() code is executed, rather than the mainThread() code which creates the worker polyfill.
[...]
This change executes workerThread() only if the mod property is present from the workerData, indicating that it's being executed from a thread created within this library. If mod isn't present, this means that the code is executing within the context of some other worker thread that wasn't created from this library, and it needs to treat the current thread as the main thread by executing mainThread().

Linguagem predominante
JavaScript
Estrelas
1.2k
Forks
58
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de developit/web-worker

Todas as issues de developit/web-worker

Issues semelhantes

Mais issues de JavaScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.