运行电子应用程序后如何执行停止脚本?

时间:2018-08-03 22:23:32

标签: javascript node.js mongodb electron

我创建了一个小型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脚本的运行与我预期的一样,但是似乎stop脚本在我的Electron应用程序关闭或按 Ctrl < / kbd> + C

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

1 个答案:

答案 0 :(得分:1)

就像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
});