我正在使用 React 和 SQLite3 在 Electron 中构建一个桌面应用程序。我的配置如下:
- 节点:v14.17.4
- 电子:13.2.1
- 反应:17.0.2
- sqlite3:^5.0.2
我正在尝试启用主端和渲染器端之间的通信,以便通过按下使用 react 构建的按钮在 SQLite3 数据库中插入一行。为此,我正在尝试使用 ipcmain 和 ipcrenderer,但是,如果我使用该指令,const electron = require ("electron");
我会收到错误:TypeError: fs.existsSync is not a function
.
我正在使用该npm run start
命令在开发模式下运行应用程序。
包.json
{
"name": "bank-account-test",
"version": "0.1.0",
"private": true,
"main": "public/main.js",
"homepage": "./",
"scripts": {
"react:start": "react-scripts start",
"react:build": "react-scripts build",
"react:test": "react-scripts test",
"react:eject": "react-scripts eject",
"electron:build": "electron-builder",
"release": "npm run react:build && npm run electron-builder --publish=always",
"build": "npm run react:build && npm run electron:build",
"start": "concurrently \"cross-env BROWSER=none npm run react:start\" \"wait-on http://localhost:3000 && electron .\""
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@types/react": "^17.0.19",
"electron": "^13.2.1",
"electron-builder": "^22.11.7"
},
"dependencies": {
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"concurrently": "^6.2.1",
"cross-env": "^7.0.3",
"electron-is-dev": "^2.0.0",
"react": "^17.0.2",
"react-bootstrap": "^1.6.1",
"react-dom": "^17.0.2",
"react-scripts": "4.0.3",
"sqlite3": "^5.0.2",
"typescript": "^4.3.5",
"wait-on": "^6.0.0"
}
}
main.js
const electron = require("electron");
const { app, BrowserWindow } = electron;
const path = require("path");
const isDev = require("electron-is-dev");
const sqlite3 = require('sqlite3').verbose();
let mainWindow;
const createWindow = () => {
mainWindow = new BrowserWindow({
width: 900,
height: 680,
webPreferences: {
nodeIntegration: true,
enableRemoteModule: true,
}
});
mainWindow.loadURL(
isDev ? "http://localhost:3000" : `file://${path.join(__dirname, "../build/index.html")}`
);
mainWindow.on("closed", () => (
mainWindow = null
));
// Open the DevTools.
mainWindow.webContents.openDevTools();
}
app.on("ready", createWindow)
app.on("window-all-closed", () => process.platform !== "darwin" && app.quit());
app.on("activate", () => mainWindow === null && createWindow());