1

我正在使用 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());
4

0 回答 0