在电子工进程中不能要求使用node_modules

时间:2019-01-29 05:58:06

标签: javascript node.js electron web-worker

问题

我正在尝试在电子领域使用网络工作者。到目前为止,我可以从渲染器进程实例化工作进程,但是当我尝试在工作进程中执行require('some_module')时,该进程将崩溃并显示错误。

  

找不到模块'some_module'

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

我已经按照here所述的所有步骤进行操作。另外,我已经设置了选项nodeIntegrationInWorker: true,并且可以毫无问题地require调用fs之类的节点内置模块。


一些观察

    呈现过程中的
  1. __dirname解析为

      

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

    ,并且在工作进程中解析为

      

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

    据我所读,require函数应该能够在 renderer node_modules 目录中找到我的模块。 >工人目录

  2. 快速查看工作程序中的process全局变量,发现process.type等于workerprocess.argv[1]等于--type=renderer奇怪。


电子版本=“ 4.0.0”,平台=“ win32”,arch =“ x64”,节点版本=“ v10.11.0”

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

1 个答案:

答案 0 :(得分:0)

好的。作为解决方法,我使用它。

    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);
    });

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