我创建了一个小型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
脚本的运行与我预期的一样,但是似乎stop
脚本在我的Electron应用程序关闭或按 Ctrl < / kbd> + C 。
在关闭我的Electron应用程序或使用 Ctrl + C 时,我如何实现MongoDB服务器也关闭的功能?
答案 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
});