electron前端项目无法使用require引入node模块解决方案
创建时间:2025-05-10 11:06
长度:1096
浏览:0
评论:0
新版 electron (>12) 出现 window.require is not a function
新版 electron 禁止在 window 上随意添加属性,所以这种方式会报错。
关键时,使用新建 BrowserWindow webPreferences 的一个特殊属性 preload
preload 字符串(可选)- 指定在页面中其他脚本运行之前被加载的脚本。 无论打开还是关闭 integratioin,此脚本始终可以访问 node API。
第一步,创建 preload 脚本,在哪里都可以,我选择和 main.js 在同一位置下。
preload.js
// 在这个文件中可以访问所有的 nodejs API,我们将 require 扩展到 window 上面去
window.require = require
main.js
const { app, BrowserWindow } = require('electron');
const isDev = require('electron-is-dev');
const path = require('path');
let mainWindow = null;
app.on('ready', () => {
mainWindow = new BrowserWindow({
width: 1024,
height: 680,
webPreferences: {
nodeIntegration: true,
preload: path.join(__dirname, 'preload.js'),
// https://www.electronjs.org/zh/docs/latest/tutorial/context-isolation
// 关闭上下文隔离,它会让 preload 里面的内容和 renderer 无法互相访问,默认为 true,设置为 false
contextIsolation: false,
}
})
mainWindow.webContents.openDevTools();
// 连接react项目链接
const loadURL = isDev ? 'http://localhost:3000' : '暂时还不定义'
mainWindow.loadURL(loadURL);
})
注意安全哦。