在电子中使用 foreverjs 会导致 dock 中的电子应用程序重复



我在我的电子应用程序main中使用foreverjs,如下所示:

const forever = require("forever-monitor");
let child = forever.start(scriptPath, {fork: true});

我故意使用 child_process.fork 这样做,因为我希望 foreverjs 监控分叉并在需要时重新启动它们。

好吧 - 以上有效,但是在 mac osx 上查看我的扩展坞,我看到每个分叉都复制了电子应用程序。在生产中也是如此 - 应用程序图标在每个进程的 Dock 中重复 N 次。

进一步调查,我找到了原因,但没有找到解决方案。原因是,当您从电子内部分叉通常使用child_process的进程时,它会使用 Electron Helper 应用程序启动它。

但是,当您使用 forever 分叉一个进程时.js它会使用 Electron 应用程序本身,从而解释重复项。

如何在分叉时强制永远使用电子助手应用程序而不是电子应用程序本身?

好的,所以我想通了。很简单,您需要将一个环境变量传递给foreverjs,如下所示:

const forever = require("forever-monitor");
let child = forever.start(scriptPath, {fork: true, env: {ELECTRON_RUN_AS_NODE: 1}});

这样做,分叉将正确使用其预打包版本的节点,而不是启动电子"main"的另一个副本。

最新更新