Как связать зависимости worker_thread с webpack

#node.js #webpack #worker-thread #node-worker-threads

Вопрос:

Я пишу электронное приложение, которое использует электронную кузницу для настройки и настройки. Проект использует Webpack 5 в качестве пакета и машинописный текст в качестве языка разработки. У меня возникли проблемы с запуском worker_thread в основном потоке.

Все это работает нормально, пока worker_thread не использует какие-либо импортированные локальные модули. Но когда я импортирую модули, их невозможно найти. Я думаю, это потому, что webpack не связывает зависимости от работника.

Мой код выглядит так:

индекс.ts (электронная основная нить):

 ipcMain.handle('export', async (event, measurements: Measurement[], options: ExportOptions) => {
    return new Promise((resolve, reject) => {
        const worker = new Worker(new URL('./export.worker.js', import.meta.url))
        worker.on('message', resolve)
        worker.on('error', reject)
        worker.postMessage({
            measurements,
            options,
        })
    })
})
 

export.worker.js (та же папка, что и main.ts):

 const { parentPort } = require('worker_threads')
const { Export } = require('../preload/export')

parentPort.on('message', async (data) => {
    const { measurements, options } = data
    await Export.export(measurements, options)
    parentPort.close()
})
 

Когда я пытаюсь запустить это, я получаю:

 Error occurred in handler for 'export': Error: Cannot find module '../preload/export'
Require stack:
- C:Developmentspectro-demointernal-client.webpackmaina3142abb2db60e4fab06.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:892:15)
    at Function.Module._load (internal/modules/cjs/loader.js:737:27)
    at Module.require (internal/modules/cjs/loader.js:964:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (C:Developmentspectro-demointernal-client.webpackmaina3142abb2db60e4fab06.js:2:20)
    at Module._compile (internal/modules/cjs/loader.js:1083:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1113:10)
    at Module.load (internal/modules/cjs/loader.js:940:32)
    at Function.Module._load (internal/modules/cjs/loader.js:781:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\Development\spectro-demo\internal-client\.webpack\main\a3142abb2db60e4fab06.js'
  ]
}
 

Поэтому мне интересно: как я могу использовать worker_threads, которые ссылаются на модули в моем проекте?

Ответ №1:

Я смог это исправить. Похоже, это ошибка в webpack 5. Смотрите это репо для решения проблемы: https://github.com/DustinJSilk/web-worker-ts-webpack-test