5.electron之主进程起一个本地服务

如果可以实现记得点赞分享,谢谢老铁~

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和

Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、macOS 和 Linux

的跨平台应用。

1.项目效果, 我这里的本地服务是一个离线的地图

  1. 文件目录

我的目的就是将 public/foxigis-server-lite-win/foxigis-server-lite-win.exe 这个文件起一个服务便于本地离线地图调用。

  1. electron.js 主进程, 编写startServer和stopServer的方法
javascript 复制代码
// 打开窗口
function createWindow() {
    mainWindow = new BrowserWindow({
        width: 1200,
        height: 700,
        minWidth: 1200, // 设置窗口的最小宽度
        minHeight: 700, // 设置窗口的最小高度
        icon: __dirname + "/favicon.ico",
    });

    mainWindow.title = 'UniSAR';
    mainWindow.maximize();
    mainWindow.loadFile(appConfig.fileUrl);
}

let childProcess = null;
function startServer() {
    // 构建 .exe 文件的绝对路径
    const exePath = path.join(__dirname, 'foxgis-server-lite-win', 'foxgis-server-lite-win.exe');
    const childProcess = cp.spawn(exePath);


    console.log('=========================' + exePath)
    childProcess.on('close', (code) => {
        console.log(`exe process exited with code ${code}`);
    });
    // 监听服务 B 的输出
    childProcess.stdout.on('data', (data) => {
        console.log(`Service B Output: ${data}`);
        // 在这里可以根据输出信息判断服务是否已经启动
        // 例如,检查输出中是否包含特定的启动完成标志
        if (data.indexOf('1234') !== -1) {
            // 服务已经启动,可以执行服务 A 中调用服务 B API 的代码
            // PS: 这里确保本地服务启动起来才来调用窗口的创建函数。
            createWindow();
        }
    });

    // 监听服务 B 的错误信息
    childProcess.stderr.on('data', (data) => {
        console.error(`Service B Error: ${data}`);
        // 这里可以处理服务 B 的错误信息
    });

    // 在服务 B 启动后执行其他逻辑
    childProcess.on('exit', (code) => {
        console.log(`Service B exited with code ${code}`);
        // 这里可以处理服务 B 退出后的逻辑
    });
}

function stopServer() {
    if (childProcess !== null) {
        childProcess.kill('SIGTERM'); // 发送 SIGTERM 信号终止子进程
        childProcess = null; // 清空对子进程的引用
        console.log('服务已停止');
    } else {
        console.log('没有运行的服务');
    }
}

app.on('ready', () => {
	// 开始本地服务启动
    startServer()

});

app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
        createWindow();
    }
});

app.on("window-all-closed", () => {
    if (process.platform !== "darwin") {
    	// 停止本地服务
        stopServer()
        app.quit();
    }
});


// 在应用退出时关闭服务
app.on('before-quit', () => {
	// 停止本地服务
    stopServer();
});

4.运行以下命令来构建React项目:

powershell 复制代码
npm run build

PS:打开build目录下的index.html文件,发现是一片空白😱,F12一下,发现是资源路径不对。解决方案是在package.json中添加"homepage": "./"。添加之后再进行build,打开index.html,就能看到正常页面了。

5.运行以下命令来启动Electron应用程序:

powershell 复制代码
npm run electron:dev

这将启动Electron应用程序,并加载React应用程序的构建文件。

6.运行以下命令来打包Electron应用程序:

powershell 复制代码
npm run electron:build

收工!谢谢老铁们的点赞收藏~

相关推荐
小雨下雨的雨11 小时前
数独算法与求解器鸿蒙PC Electron框架完成深度解析
javascript·人工智能·算法·游戏·华为·electron·鸿蒙系统
薛定谔的猫-菜鸟程序员12 小时前
从Electron到Tauri,Rust+Vue(Tauri) 实现超高性能桌面日志应用开发,以及开发避坑指南
vue.js·rust·electron
小雨下雨的雨17 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
TrisighT1 天前
Electron 窗口切后台,我的轮询怎么停了?排查一下午才发现是浏览器搞的鬼
electron·harmonyos
怕浪猫1 天前
Electron 开发实战(十二):安全性最佳实践|彻底杜绝漏洞、代码执行与数据泄露
前端·javascript·electron
AI_零食2 天前
鸿蒙PC Electron跨平台应用开发:24时区时间表应用详解
前端·华为·electron·开源·harmonyos·鸿蒙
提子拌饭1332 天前
爆发效果技术——基于鸿蒙PC Electron框架实现
华为·架构·electron·开源·harmonyos·鸿蒙·鸿蒙系统
TrisighT2 天前
Electron 的 printToPDF 在鸿蒙 PC 上翻车了,我换了个纯前端方案绕过去
electron·harmonyos
怕浪猫2 天前
Electron 开发实战(十一):自动更新机制|服务架构、公私网更新、版本回滚全解
前端·javascript·electron
web打印社区2 天前
前端html转换pdf并静默打印pdf最佳实现路径
前端·javascript·vue.js·electron·html