开发者问题收集

如何在退出 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