如何在退出 Electron 应用时关闭 React 应用
2019-09-19
2415
我有一个 Electron + React 应用程序在端口 3000 上运行。当我从 Electron 的 start.js 文件中调用 app.quit 方法时,它会退出 Electron,但我仍然可以通过 netstat -ao 看到 0.0.0.0:3000 处于 LISTENING 状态。
我正在使用 Windows 10,我尝试从 electron 文件中执行 app.exit(0),但是 React 应用程序仍然可以从浏览器访问,并且 netstat -ao 显示 0.0.0.0:3000 处于 LISTENING 状态。
"scripts": {
"start": "nf start -p 3000",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"electron": "electron .",
"electron-start": "node src/start-react",
"react-start": "SET BROWSER=none&&react-scripts start",
"pack": "build --dir",
"dist": "npm run build && build",
"postinstall": "install-app-deps",
"preinstall": "npm install -g foreman"
},
我想在调用 Electron 的 app.quit() 之后/之前完全关闭 ReactApp 这是我用于关闭应用程序的代码。
ipcMain.on('closeApp', (evt, arg) => {
app.exit(0)
});
1个回答
您看到
0.0.0.0:3000
仍在监听,因为您没有正确关闭连接。您需要在退出应用程序之前关闭 React 应用服务器。在 Electron
app
中有一个名为
before-quit
的事件,该事件恰好在应用程序退出之前触发。您可以利用回调来关闭服务器。要查找连接到端口 3000 的
pid
,有一个
find-process
包,找到
pid
后,终止该进程。考虑给定的示例。
const find = require('find-process');
app.on('before-quit' , (e) => {
find('port', 3000)
.then(function (list) {
if(list[0] != null){
process.kill(list[0].pid, 'SIGHUP');
}
}.catch((e) => {
console.log(e.stack || e);
});
});
Kiran Maniya
2019-09-19