javascript - 在 Electron 渲染器进程中持久化 nedb 到磁盘(Webpack/Electron/nedb 配置问题)
问题描述
问题
我正在尝试在电子渲染器进程中使用一个名为nedb的纯 JS 数据库。它使用其中的字段browser
来交换基于浏览器的存储系统。这导致我的数据库实际上没有被持久化到文件中。package.json
背景
我使用 Next.js 作为我的视图框架,它的 Webpack 是为"target": "electron-renderer"
渲染线程配置的。这显然会导致 Webpack 处理这些浏览器指令,即使渲染器进程应该可以访问浏览器和 Node API。这种行为并没有真正记录在案,所以我不知道如何覆盖它。
我试过的
我已经确认,如果我手动编辑browser
的本地副本上的字段node_modules/nedb/package.json
,问题就会消失。
作为一种临时的解决方法,我已经指出了我自己的 fork 就是nedb
这样做的。但这很不令人满意。
其他研究
奇怪的是,这似乎不是 electron-vue 的问题,它的文档明确展示了nedb
从渲染器进程中的使用。该框架确实似乎"target": "electron-renderer"
在其 Webpack 配置中使用。
有没有解决这个问题的方法,也许是通过 Webpack 配置?
解决方案
您不需要在渲染器进程上运行数据库,而是可以在主进程上运行您想要的其他数据库,如 sql、sqlite、mongodb 等。
如果您不介意切换数据库,以下是实现此目的的方法。在 Electron 中存在一个名为 ipcMain 和 ipcRenderer 的类,这些类用于使渲染器进程和主进程通信。您可以使用 ipc 发送/接收任何类型的数据。
这是一个例子:
渲染器.js
const btnSave = document.getElementById('btn-save')
// Get any data from forms, etc
btn.addEventListener('click', () => {
// ipcRender sends the data via 'receive-data-to-save-in-database' channel, you
// you can send any type of data, and have has many args you want. In this case I
// sent a a empty object
ipcRenderer.send('receive-data-to-save-in-database', {})
})
主.js
// ipcMain listens to channel 'receive-data-to-save-in-database'
ipcMain.on('receive-data-to-save-in-database', (event, args) => {
// Code to save in database
// The empty object will be received in args parameter
})
这不是您想要的,而是一种解决方法。
欲了解更多信息,我建议你去:
推荐阅读
- powershell - Powershell - Get-Childitem -include 的问题
- python - 使用带有字典的python理解为pandas数据框赋值
- python - python turlte中列表之间的交互
- node.js - 向 mongodb 添加数据时出错
- python - 在墨卡托投影仪的地图上绘制数据看起来像翻转了 90 度纬度
- java - 弹性搜索优先以匹配开头
- node.js - 在heroku nodejs上部署失败
- cuda - 查询 threadIdx、blockIdx、blockDim 有多快?
- r - 为什么这个 geom_density 的一部分被排除在情节之外?
- react-native - 如何让滚动视图占据 100% 的屏幕高度,甚至包括缺口,这可能吗?