【问题标题】:How to Close React App on Electron App Quit如何在 Electron 应用退出时关闭 React 应用
【发布时间】:2019-09-19 14:47:55
【问题描述】:

我有一个在端口 3000 上运行的 Electron + React 应用程序。当我从 Electron 的 start.js 文件中调用 app.quit 方法时,它从 Electron 退出,但我仍然可以看到 0.0.0.0:3000 在来自 netstat -ao 的 LISTENING 状态。

我在 Windows 10 上工作,我尝试了电子文件中的 app.exit(0),但是仍然可以从浏览器访问 React 应用程序,并且 netstat -ao 在 LISTENING 状态下显示 0.0.0.0:3000。

  "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)
});

【问题讨论】:

    标签: javascript reactjs electron


    【解决方案1】:

    您看到0.0.0.0:3000 仍在收听,因为您没有正确关闭连接。您需要在退出应用程序之前关闭反应应用程序服务器。在电子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);
        });
    });
    

    【讨论】:

    • 感谢您的回答。那请问是什么代码块可以完全优雅地关闭ReactJS。我找不到任何东西,而不是杀死在 Reacts 端口上运行的 PID。
    • 就是这样,您必须找出连接到端口 3000 的进程(这里您将反应服务器连接到端口 3000,因此它始终是您的进程)并在退出之前终止该进程应用程序。
    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多