#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