关于#Electron#的问题,如何解决?

Electron+React+lowdb在运行出现了

img

按照网上的解决方法在package.json里面放置"type": "module",就可以了

再次运行结果如下

img

######datastore.js代码如下

 
const Datastore = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const path = require('path')
const fs = require('fs-extra')
const { app,remote } = require('electron')
const LodashId = require('lodash-id')

 // 通过._mixin()引入

// 渲染进程和主进程兼容
const APP = process.type === 'renderer' ? remote.app : app;

const STORE_PATH = APP.getPath('userData')

const adapter = new FileSync(path.join(STORE_PATH,'/data.json')) // 初始化lowdb读写的json文件名以及存储路径

const db = Datastore(adapter) // lowdb接管该文件

if (process.type !== 'renderer') {
    if (!fs.pathExistsSync(STORE_PATH)) {
      fs.mkdirpSync(STORE_PATH)
    }
  }

if(!db.has('list').value()){
    db.set('list',[ {
        "key": _.mixin(LodashId),
        "date": "2023/1/23",
        "encode": "鞋子fg39",
        "name":"劳保鞋39",
        "Model": "39",
        "location": "1号库A区",
        "Head": "林振恩",
        "quantity": "5",
        "unitprice": "5000",
    },]).write()
}

// function getTestData(){
  
// }


export default db

main.js代码如下
// 引入electron并创建一个Browserwindow
const { app, BrowserWindow, } = require("electron");
const path = require("path");
const url = require("url");
const {ipcMain} = require('electron')
import { db } from './lowdb/datastore'

// 保持window对象的全局引用,避免JavaScript对象被垃圾回收时,窗口被自动关闭.
let mainWindow;

function createWindow() {
  //创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      // preload: path.join(__dirname, "preload.js"),
      nodeIntegration: true,
      contextIsolation: false,
    },
  });

  /* 
   * 加载应用-----  electron-quick-start中默认的加载入口
    mainWindow.loadURL(url.format({
      pathname: path.join(__dirname, './build/index.html'),
      protocol: 'file:',
      slashes: true
    }))
  */
  // 加载应用----适用于 react 项目
  mainWindow.loadURL("http://localhost:3000/");



  ipcMain.on('info', (event, arg) => {
    console.log('主进程',arg);
    db.has('list').value()
    
  });

  // 打开开发者工具,默认不打开
  // mainWindow.webContents.openDevTools()

  // 关闭window时触发下列事件.
  mainWindow.on("closed", function () {
    mainWindow = null;
  });
}

// 当 Electron 完成初始化并准备创建浏览器窗口时调用此方法
app.on("ready", createWindow);

// 所有窗口关闭时退出应用.
app.on("window-all-closed", function () {
  // macOS中除非用户按下 `Cmd + Q` 显式退出,否则应用与菜单栏始终处于活动状态.
  if (process.platform !== "darwin") {
    app.quit();
  }
});

app.on("activate", function () {
  // macOS中点击Dock图标时没有已打开的其余应用窗口时,则通常在应用中重建一个窗口
  if (mainWindow === null) {
    createWindow();
  }
});

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”