【发布时间】:2019-06-11 10:16:24
【问题描述】:
在我的 Electron 项目中,我试图通过将其设置为全局来制作模块单例。由于我在这个模块中使用了jquery,所以我在渲染器进程中将其导入,然后通过 ipc 将其发送到主程序并在那里将其设置为全局。这是我的代码的相关部分:
main.js:
ipcMain.on( "setGlobal", ( event, global_var) => {
global[global_var[0]] = global_var[1];
console.log(global_var);
event.returnValue = 1;
} );
renderer.js:
const favourites = require("./components/favourites");
console.log(favourites);
ipcRenderer.sendSync("setGlobal", ["favourites", favourites]);
console.log(remote.getGlobal("favourites"));
console.logs 在渲染器进程中的输出如下图所示:
而主进程的输出是:
[ 'favourites', { favourites: [] } ]
如您所见,我从 ipcRenderer 发送的对象(模块)在 ipcMain 中发生了更改,它失去了 add 和 init 功能。您知道这种行为的原因是什么以及如何解决吗?
PS:可以肯定的是,我使用包含函数的简单对象而不是require("favourites") 对其进行了测试。他们也以同样的方式行事。我做了一个解决方法,只使用实体作为全局并将它们作为参数传递给所有函数。但是,从代码可读性的角度来看,这并不是一个好方法。
【问题讨论】:
标签: node.js singleton electron ipc