【问题标题】:How can i execute stop script after i run electron application?运行电子应用程序后如何执行停止脚本?
【发布时间】:2019-01-11 19:50:07
【问题描述】:

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

现在我需要在我的package.json 中配置startstop 脚本,这样每次我发出npm start 时,NPM 都会首先启动我的MongoDB,一旦启动就运行我的Electron 应用程序。

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

"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+C.

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

【问题讨论】:

  • 你能不能抓到SIGINT,比如process.on('SIGINT', function() { //cleanup });

标签: javascript node.js mongodb electron


【解决方案1】:

就像package.json 中的start 脚本一样,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
});

【讨论】:

  • 我做了自己的研究,发现了以下npm 模块:node-run-cmd,它最后一次发布是在 2 年前,但对我的目的来说效果很好。使用这个模块,我执行两个命令:'mongodb/bin/mongod --dbpath mongodb/data/db --logpath logs/mongodb/mongolog.txt''mongodb/bin/mongo localhost/admin --eval "db.shutdownServer()"',而不是修改package.json 中的脚本,到目前为止,一切似乎都按我的预期工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多