我创建了一个小的Electron应用程序,该应用程序需要一个小的本地MongoDB(社区版本)数据库。
现在,我需要在自己的start
中配置stop
和package.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"
}
start
和prestart
脚本的运行与我预期的一样,但是似乎一旦我的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
});