在 electron 中使用 foreverjs 会导致 electron app 在 dock 中重复
Using foreverjs in electron causes electron app duplicates in dock
我在我的 electron 应用程序中使用 foreverjs,如下所示:
const forever = require("forever-monitor");
let child = forever.start(scriptPath, {fork: true});
我在使用 child_process.fork 时故意这样做,因为我希望 forverjs 监控分叉并在需要时重新启动它们。
好吧 - 以上工作正常,但在 mac osx 上查看我的 dock,我发现每个 fork 都有重复的 electron 应用程序。在生产中它是相同的——应用程序图标在 Dock 中为每个进程复制 N 次。
进一步调查我找到了原因,但没有找到解决方案。原因是,当您通常使用 child_process 从 electron 中 fork 一个进程时,它会使用 Electron Helper 应用程序启动它。
然而,当您使用 forever.js 分叉进程时,它会使用 Electron 应用程序本身,从而解释重复项。
如何在分叉时强制永远使用 Electron Helper 应用程序而不是 Electron 应用程序本身?
好的,我明白了。很简单,您需要像这样将一个环境变量传递给 foreverjs:
const forever = require("forever-monitor");
let child = forever.start(scriptPath, {fork: true, env: {ELECTRON_RUN_AS_NODE: 1}});
这样做,fork 将正确使用其预先打包的节点版本,而不是启动另一个电子副本 "main"。
我在我的 electron 应用程序中使用 foreverjs,如下所示:
const forever = require("forever-monitor");
let child = forever.start(scriptPath, {fork: true});
我在使用 child_process.fork 时故意这样做,因为我希望 forverjs 监控分叉并在需要时重新启动它们。
好吧 - 以上工作正常,但在 mac osx 上查看我的 dock,我发现每个 fork 都有重复的 electron 应用程序。在生产中它是相同的——应用程序图标在 Dock 中为每个进程复制 N 次。
进一步调查我找到了原因,但没有找到解决方案。原因是,当您通常使用 child_process 从 electron 中 fork 一个进程时,它会使用 Electron Helper 应用程序启动它。
然而,当您使用 forever.js 分叉进程时,它会使用 Electron 应用程序本身,从而解释重复项。
如何在分叉时强制永远使用 Electron Helper 应用程序而不是 Electron 应用程序本身?
好的,我明白了。很简单,您需要像这样将一个环境变量传递给 foreverjs:
const forever = require("forever-monitor");
let child = forever.start(scriptPath, {fork: true, env: {ELECTRON_RUN_AS_NODE: 1}});
这样做,fork 将正确使用其预先打包的节点版本,而不是启动另一个电子副本 "main"。