【问题标题】:How to bundle worker_thread dependencies with webpack如何将 worker_thread 依赖项与 webpack 捆绑
【发布时间】:2021-10-04 12:12:06
【问题描述】:

我正在编写一个使用 electron forge 进行设置和配置的电子应用程序。 该项目使用 Webpack 5 作为打包工具,使用 typescript 作为开发语言。我在主线程上运行 worker_thread 时遇到问题。

只要 worker_thread 不使用任何导入的本地模块,一切都可以正常工作。但是当我导入模块时找不到它们。我在想这是因为 webpack 没有捆绑来自 worker 的依赖项。

我的代码如下所示:

index.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:\Development\spectro-demo\internal-client\.webpack\main\a3142abb2db60e4fab06.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:\Development\spectro-demo\internal-client\.webpack\main\a3142abb2db60e4fab06.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?

【问题讨论】:

    标签: node.js webpack worker-thread node-worker-threads


    【解决方案1】:

    我能够修复它。似乎是 webpack 5 中的一个错误。有关解决方法,请参阅此 repo:https://github.com/DustinJSilk/web-worker-ts-webpack-test

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2018-04-18
      • 1970-01-01
      相关资源
      最近更新 更多