我正在制作的Electron + Create React App应用程序遇到一些问题。这是一个用于成本计算的离线应用程序,我需要保留几个用户设置,为此我使用了https://github.com/sindresorhus/electron-store。像大多数电子模块一样,我必须将其导入为:
const Store = window.require("electron-store");
为了避免webpack的冲突。通过搜索,我发现对于大多数人来说,在创建电子的BrowserWindow时将nodeIntegration:true设置可以避免该问题,但不是我的情况,我总是遇到相同的错误。
我已经尝试过的:
使用普通要求:导致TypeError:fs.existsSync不是函数,并且在控制台中:无法解析'... \ node_modules \ write-file-atomic'中的'worker_threads'
使用模块覆盖Webpack配置:我使用craco将目标设置为电子渲染器。当我启动应用程序时,它会导致空白页,并且devtools中的错误告诉ReferenceError:require未定义
其他信息是,我不是使用打字稿而是使用普通的js,所以使用“声明全局”这样就行不通了
我的public / electron.js文件:
const electron = require("electron");
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const path = require("path");
const isDev = require("electron-is-dev");
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 900,
height: 680,
webPreferences: {
nodeIntegration: true
}
});
mainWindow.loadURL(
isDev
? "http://localhost:3000"
: `file://${path.join(__dirname, "../build/index.html")}`
);
mainWindow.on("closed", () => (mainWindow = null));
if (!isDev) mainWindow.setMenu(null);
}
app.on("ready", createWindow);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
electron.app.allowRendererProcessReuse = true;
app.on("activate", () => {
if (mainWindow === null) {
createWindow();
}
});
答案 0 :(得分:1)
您已经在电子上创建了预加载脚本。
在您具有电子主脚本的目录上创建一个名为preload.js的文件,并在其中添加以下代码:
window.require = require;
转到电子主脚本,并在创建窗口的代码中键入以下内容:
win =新的BrowserWindow({ 宽度:1280, 高度:720, webPreferences:{ nodeIntegration:否, 预加载:__dirname +'/preload.js' }
}) 有了这个,您将首先预加载脚本,这对我来说已经解决了问题,希望对您也是如此。