我创建了一个小的Electron应用程序,该应用程序需要一个小的本地MongoDB(社区版本)数据库。

现在,我需要在自己的start中配置stoppackage.json脚本,以便每次我发布npm start时,NPM都会首先启动MongoDB,并在启动后运行我的Electron应用程序。

目前,我的scripts中的package.json部分如下所示:

"scripts": {
  "stop": "mongodb/bin/mongo admin --eval 'db.shutdownServer()'",
  "prestart": "mongodb/bin/mongod --dbpath mongodb/data/db --fork --logpath logs/mongodb/mongolog.txt",
  "start": "electron . --fork > logs/mylog/mylog.txt"
}
startprestart脚本的运行与我预期的一样,但是似乎一旦我的Electron应用程序关闭或按Ctrl + C,stop脚本就不会执行。

当我关闭我的Electron应用程序或使用Ctrl + C我的MongoDB服务器也关闭时,如何实现?

最佳答案

就像start中的package.json脚本一样,stop脚本将在您的命令行中only be executed if you issue npm stop

使用Electron,您可以在主流程脚本中使用app.on()检测何时关闭应用程序。这里有两个相关的事件: before-quit (将在Electron关闭所有窗口之前执行)和 will-quit (将在Electron关闭所有浏览器窗口之后发出)。当您的应用程序因为所有窗口都关闭而退出时,以及Electron收到SIGINT(Ctrl + C)时,都会触发这两个事件。

使用这两个事件之一,您将能够运行您尝试使用NPM运行的命令:

const { exec } = require ("child_process");

// ...all of your main process' code...

app.on ("before-quit", (event) => {
  exec ("mongodb/bin/mongo admin --eval 'db.shutdownServer()'");
  process.exit (); // really let the app exit now
});

10-08 13:03