【发布时间】:2020-08-31 10:11:14
【问题描述】:
我正在尝试创建一个适用于主进程和渲染器进程的单例类,但我不确定最好的方法是什么。
例如,我有一个处理存储数据的类:
class Prefs {
constructor() {
this.prefsCache = // Load the prefs from a json file into the cache
}
set(key, value) {
this.prefsCache[key] = value
// Also save the prefs to disk here
}
get(key) {
return this.prefsCache[key]
}
}
export default new Prefs()
这在单个进程中效果很好,但是如果主进程和渲染器中需要该类,则缓存将变得不同步,因为每个进程都有不同的实例,因此更改了偏好设置。
看起来解决方案是使用IPC,但我找不到一个优雅的解决方案。在这里,我创建了两个不同的类。 PrefsMain 处理保存和存储数据,PrefsRenderer 将与 PrefsMain 通信:
class PrefsMain {
constructor() {
ipcMain.on('set-prefs-value', (event, key, newValue) => {
this.set(key, newValue)
})
}
set(key, value) {
// ...
}
}
class PrefsRenderer {
set(key, newValue) {
ipcRenderer.sendSync('set-prefs-value', key, newValue)
}
}
做类似上面的事情,但实际上,我有多个单例,每个都有 20 个左右的方法。似乎需要编写很多额外的代码才能以这种方式完成。
我找到的另一个解决方案是使用电子的远程模块:
const Prefs = require('electron').remote.require('./prefs.js')
这也可以,但它看起来像远程模块is going to be deprecated,所以我宁愿不这样做。
有没有更好的解决方案?如何优雅地创建一个可以在主进程和渲染器进程中使用的单例类,而不必为每个进程创建一个重复的 IPC 处理程序类?
【问题讨论】:
-
你不能为此使用
electron-settings包吗? ,这个逻辑已经实现了
标签: javascript node.js electron singleton ipc