我正在尝试在电子领域使用网络工作者。到目前为止,我可以从渲染器进程实例化工作进程,但是当我尝试在工作进程中执行require('some_module')
时,该进程将崩溃并显示错误。
找不到模块'some_module'。
cjs加载器显然找不到我的模块。但是,当我从渲染器进程进行相同的require
调用时,我就可以require
了该模块。
我已经按照here所述的所有步骤进行操作。另外,我已经设置了选项nodeIntegrationInWorker: true
,并且可以毫无问题地require
调用fs
之类的节点内置模块。
__dirname
解析为
root / node_modules / electron / dist / resources / electron.asar / renderer
,并且在工作进程中解析为
root / node_modules / electron / dist / resources / electron.asar / worker
据我所读,require函数应该能够在 renderer 和 node_modules 目录中找到我的模块。 >工人目录
快速查看工作程序中的process
全局变量,发现process.type
等于worker
而process.argv[1]
等于--type=renderer
奇怪。
元: 电子版本=“ 4.0.0”,平台=“ win32”,arch =“ x64”,节点版本=“ v10.11.0”
在这方面的任何帮助将不胜感激。
答案 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);
});
上面的代码片段手动添加了路径节点,以解决所需的模块。