can't import web-worker inside a NodeJS worker thread with no workerData
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 themainThread()code which creates the worker polyfill.
[...]
This change executesworkerThread()only if themodproperty is present from theworkerData, indicating that it's being executed from a thread created within this library. Ifmodisn'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 executingmainThread().
- Linguagem predominante
- JavaScript
- Estrelas
- 1.2k
- Forks
- 58
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de developit/web-worker
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 52/100
developit/web-worker#55 · 1 comentário · 5 reações ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 30/100
developit/web-worker#51 · 1 comentário ·
-
Blob URL does not work on Node.jsTalvez já em andamento @msikma assumiu há 1526 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 42/100
developit/web-worker#30 · 4 comentários · 9 reações ·
-
Register submoduleAbertaenhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 35/100
developit/web-worker#27 ·
-
Add support for SharedWorkerAberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
developit/web-worker#25 ·
Todas as issues de developit/web-worker
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
-
enhancement
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 85/100
holepunchto/hrpc-test#28 ·
-
good first issue
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
anoopcodehack/DevBoard#616 ·
Mantenedores costumam responder em até 2 dias
-
idnits3
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 63/100
ietf-tools/idnits#319 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 76/100
521xueweihan/HelloGitHub#3939 ·