关闭 Electron 应用程序不会停止脚本
我遇到了一点问题,希望有人能帮助我。
我有一个 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();
});
有人可以帮我吗?
解决此问题的最优雅方法是在
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]
这是因为您正在使用
concurrently
,这是预期的行为。
当您关闭窗口(并在 macOS 上退出程序)时,electron 进程会停止,但是您在终端中给出的命令仍在运行,因为您仍在运行
react-scripts
。
查看您的
electron-dev
脚本,您说您想要运行命令
npm start
和
wait-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 上退出程序)时,应用程序将干净地关闭