开发者问题收集

关闭 Electron 应用程序不会停止脚本

2020-05-20
4428

我遇到了一点问题,希望有人能帮助我。

我有一个 Electron + React 桌面应用程序,我需要正确处理它的关闭。 当我关闭应用程序(单击窗口上的 X)时,程序停止,但是,我用来运行程序的终端窗口不会停止。

我使用此脚本运行程序:

npm run electron-dev

确实如此:

"scripts": {
   "start": "react-scripts start",
   "electron-dev": "concurrently \"npm run start\" \"wait-on http://localhost:3000 && electron .\""
 }

我正常运行我的应用程序,当我关闭窗口时,我的终端显示:

wait-on http://localhost:3000 && electron . exited with code 0

但是,除非我用 Control + C 终止程序,否则我无法在终端上打字。

这是我处理应用程序关闭的方式:

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
     app.quit();
   }
});

app.on('before-quit', () => {
    mainWindow.removeAllListeners('close');
    mainWindow.close();
});

有人可以帮我吗?

3个回答

解决此问题的最优雅方法是在 concurrently 脚本中使用 --kill-others / -k 选项。

在我的软件包文件中,在脚本下:

"dev": "concurrently \"npm run client\" \"wait-on tcp:3000 && electron .\" -k",

在相关进程以任何类型的方式退出时,其他进程也会停止。这可以通过 --kill-others-on-fail 进一步控制,如其文档中所述:

https://www.npmjs.com/package/concurrently

Killing other processes
  -k, --kill-others          kill other processes if one exits or dies [boolean]
      --kill-others-on-fail  kill other processes if one exits with non zero
                             status code                               [boolean]
månebjælke
2022-01-13

这是因为您正在使用 concurrently ,这是预期的行为。

当您关闭窗口(并在 macOS 上退出程序)时,electron 进程会停止,但是您在终端中给出的命令仍在运行,因为您仍在运行 react-scripts

查看您的 electron-dev 脚本,您说您想要运行命令 npm startwait-on http://localhost:3000 && electron .\ 。当您关闭 electron 应用程序时,它会告诉您该进程已结束( wait-on http://localhost:3000 && electron . exited with code 0 )。但是,您只结束了创建的 2 个进程中的 1 个。创建的进程 npm start 仍在运行,因此终端控制权不会返回给您。

npm start 执行命令 react-scripts start ,该命令设置开发环境并启动服务器。您有 几个选项可以终止进程 ,其中 CTRL+C 是最简单的。

当您打包应用程序时,您不会遇到此问题,当用户关闭窗口(或在 macOS 上退出程序)时,应用程序将干净地关闭

AJ_
2020-05-20

对于提出问题的人来说可能已经太晚了,但对于仍然在寻找解决方案的人来说:

你可以使用 npm-run-all。

这是此 的文档。

Andre GolFe
2021-11-01