无法在Electron工作进程中要求node_modules

4

问题

我正在尝试在Electron中使用Web Workers。目前,我可以从渲染器进程实例化工作进程,但是当我尝试在工作进程中执行require('some_module')时,进程会崩溃并显示以下错误:

找不到模块“some_module”

cjs加载程序显然找不到我的模块。但是,当我从渲染器进程中进行相同的require调用时,我可以require该模块。

我遵循了此处提到的所有步骤。同时,我设置了选项nodeIntegrationInWorker: true,并且可以毫无问题地对node内置模块(如fs)进行require调用。


一些观察结果

  1. 渲染器进程中的__dirname解析为

    root/node_modules/electron/dist/resources/electron.asar/renderer

    而工作进程中的解析为

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

    据我所知,require函数应该能够在node_modules目录中找到我的模块,而该目录是rendererworker目录的父目录

  2. 工作进程中process全局变量的process.type等于worker,而process.argv[1]等于--type=renderer,这让我感到奇怪。


元信息 Electron版本="4.0.0",平台="win32",架构="x64",Node版本="v10.11.0"

如有任何帮助,请告知。


遇到了同样的问题。Electron 真是太糟糕了,文档非常差。 - m4heshd
2个回答

1
好的。作为解决方法,我使用这个。
    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);
    });

上面的代码片段手动添加了路径节点以解析所需的模块。

0
你不需要做上述的事情。只需从app.asar的node_modules中进行require即可。
   const myModule = require(process.resourcesPath + '/app.asar/node_modules/' + 'modulename');

感谢我之后再说;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接