electron 无法在电子工作进程中要求node_modules

ccrfmcuu  于 2023-08-01  发布在  Electron
关注(0)|答案(2)|浏览(120)

提问

我想在电子行业使用Web Workers。到目前为止,我能够从渲染器进程示例化工作进程,但是当我尝试在工作进程中执行require('some_module')时,进程崩溃并出错。

  • 找不到模块'some_module'*。

cjs加载器显然找不到我的模块。但是,当我从渲染器进程中调用相同的require时,我能够require模块。
我已经遵循了here提到的所有步骤。我还设置了nodeIntegrationInWorker: true选项,可以毫无问题地对节点内置模块(如fs)进行require调用。

几点观察

  1. __dirname在渲染过程中解析为
  • root/node_modules/electron/dist/resources/electron.asar/renderer*

在worker进程中解析为

  • root/node_modules/electron/dist/resources/electron.asar/worker*

就我所做的阅读而言,require函数应该能够在node_modules目录中找到我的模块,该目录是rendererworker目录的父目录
1.快速查看一下worker中的process全局变量,就会发现process.type等于worker,而process.argv[1]等于--type=renderer,我觉得这很奇怪。

**Meta:**Electron version =“4.0.0”,platform =“win32”,arch =“x64”,node version =“v10.11.0”

在这方面的任何帮助将不胜感激。

rt4zxlrg

rt4zxlrg1#

好吧,作为一种变通方法,我用这个。

const paths = [
        path.join(process.resourcesPath, 'app.asar', 'node_modules'),
        path.join(process.resourcesPath, 'app', 'node_modules'),//when asar is disabled
        process.resourcesPath.replace(/electron[\\/]dist[\\/]resources/g, '')
    ];

    paths.map((path) => {
        global.require.main.paths.push(path);
    });

字符串
上面的代码段手动添加路径节点查找以解析所需的模块。

5q4ezhmt

5q4ezhmt2#

你不需要做上面的事情。只需从app.asar的node_modules中执行一个require命令:

const myModule = require(process.resourcesPath + '/app.asar/node_modules/' + 'modulename');

字符串
谢谢你以后??

相关问题