为什么preload.js返回"错误:未找到"模块? [英] Why does preload.js return "ERROR: module not found"?

查看:13
本文介绍了为什么preload.js返回"错误:未找到"模块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

构建电子应用程序时遇到错误。 我不明白为什么我的preload.js找不到‘dnode’或‘Path’模块,但它找到了‘url’模块。

preload.js:

const { ipcRenderer } = require('electron');
const url = require('url');
const dnode = require('dnode'); // It breaks here with 'Error: module not found: dnode'

process.once('loaded', () => {
  window.addEventListener('message', event => {
    const message = event.data;

    if (message.myTypeField === 'handler') {
      // TO-DO
    }

  });
});

main.js

const url = require('url');
const path = require('path');

const {app, ipcMain, BrowserWindow} = require('electron');

let mainWindow;

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        backgroundColor: '#fff',
        webPreferences: {
            preload: path.join(__dirname, './preload.js'),
            nodeIntegration: false,
            enableRemoteModule: false,
            contextIsolation: true,
            sandbox: true
        }
    });

    mainWindow.loadURL(url.format({
        pathname: path.join(__dirname, 'index.html'),
        protocol:'file:',
        slashes: true
    }));

});

My main.js找到‘Path’和‘dnode’模块,但我尝试将preload.js更改为位于node_MODULES文件夹下的项目根目录,但不起作用。

推荐答案

我非常确定这是因为您正在沙盒窗口。

参见docs

启用此选项后,呈现器必须通过IPC与主进程通信才能访问节点API。

...

沙盒呈现器没有运行Node.js环境,也不会向客户端代码公开Node.js JavaScript API。唯一的例外是预加载脚本,它可以访问电子呈现器API的子集

如果您确实需要将呈现器进程放在沙箱中,则必须改为requireipcRenderer并使用其send函数与主进程通信,然后主进程将需要所有花哨的节点模块并通过预加载发回一些响应。

这篇关于为什么preload.js返回"错误:未找到"模块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆