在电子工作者进程中不能要求node_modules

问题描述 投票:1回答:1

问题

我正在尝试在电子领域使用网络工作者。到目前为止,我能够从渲染器进程实例化工作进程,但是当我尝试在工作进程中执行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函数而言,应该能够在node_modules目录中找到我的模块,该目录是rendererworker目录的父目录]] >

  2. 快速查看工作人员中的process全局变量会发现process.type等于worker,而process.argv[1]等于--type=renderer,我觉得很奇怪。


  3. Meta:

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

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

问题,我正在尝试在电子领域使用网络工作者。到目前为止,我能够从渲染器进程实例化工作进程,但是当我尝试在工作进程中执行require('some_module')时...

javascript node.js electron web-worker
1个回答
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);
    });
© www.soinside.com 2019 - 2024. All rights reserved.