react+umi项目打包成electron桌面应用

项目介绍

web项目使用的是 React+Umi+Antd
使用的是umi的脚手架创建项目

 yarn create @umijs/umi-app

链接:umi官网

流程

1.将web项目打包成静态文件后
2.在打包后的文件 再用electron打包成桌面应用
(所以其实是用什么框架或者脚手架,都没有什么关系,最后electron需要的是可直接在浏览器访问的静态文件=》npm run build 以后生成的index.html

Coding

  1. 将项目进行打包,使用命令行
 npm run build
  1. umi脚手架打包出来的文件在文件夹 dist里,点击生成出来的index.html检测是否能正常在浏览器中review项目。
    如果显示白屏或者资源加载问题(排除代码本身问题),一般是路径设置问题,可参考我上篇文章

    链接:react+umi npm run build打包后的静态文件无法本地打开显示白屏

    如果依然存在问题,可参考官网
    umi部署:https://umijs.org/zh-CN/docs/deployment

  2. 在当前dist文件夹中

    (1)初始化项目信息

    npm init
    

    (2)安装electron 和electron-pack

    yarn add electron electron-pack
    

    (3)在package.json中加入打包的命令行

    "pack": "electron-packager . cici --win --out=release --arch=x64 --app-version=1.0.0 --electron-version=1.8.4 --overwrite --icon=./favicon.png"
    

    命令行解析:
    在这里插入图片描述
    最后的package.json如下

    {
          
          
      "name": "cici",
      "version": "1.0.0",
      "main": "main.js",
      "author": {
          
          
        "name": "cici"
      },
      "scripts": {
          
          
        "pack": "electron-packager . cici --win --out=release --arch=x64 --app-version=1.0.0 --electron-version=1.8.4 --overwrite --icon=./favicon.png"
      },
      "license": "MIT",
      "dependencies": {
          
          
        "electron": "^10.1.3",
        "electron-packager": "^15.1.0"
      }
    }
    

    (4)在dist文件夹中加入main.js(electron 包的配置文件),代码如下

    const electron = require('electron');
    // 控制应用生命周期的模块
    const {
          
          app} = electron;
    // 创建本地浏览器窗口的模块
    const {
          
          BrowserWindow} = electron;
    
    // 指向窗口对象的一个全局引用,如果没有这个引用,那么当该javascript对象被垃圾回收的
    // 时候该窗口将会自动关闭
    let win;
    
    function createWindow() {
          
          
      // 创建一个新的浏览器窗口
      win = new BrowserWindow({
          
          width: 1920, height: 1080});
    
      // 并且装载应用的index.html页面
      win.loadURL(`file://${
            
            __dirname}/index.html`);
    
      // 打开开发工具页面
      //win.webContents.openDevTools();
    
      // 当窗口关闭时调用的方法
      win.on('closed', () => {
          
          
        // 解除窗口对象的引用,通常而言如果应用支持多个窗口的话,你会在一个数组里
        // 存放窗口对象,在窗口关闭的时候应当删除相应的元素。
        win = null;
      });
    }
    
    // 当Electron完成初始化并且已经创建了浏览器窗口,则该方法将会被调用。
    // 有些API只能在该事件发生后才能被使用。
    app.on('ready', createWindow);
    /* var mainWindow = new BrowserWindow({
      webPreferences: {
        nodeIntegration: false
      }
    }); */
    // 当所有的窗口被关闭后退出应用
    app.on('window-all-closed', () => {
          
          
      // 对于OS X系统,应用和相应的菜单栏会一直激活直到用户通过Cmd + Q显式退出
      if (process.platform !== 'darwin') {
          
          
        app.quit();
      }
    });
    
    app.on('activate', () => {
          
          
      // 对于OS X系统,当dock图标被点击后会重新创建一个app窗口,并且不会有其他
      // 窗口打开
      if (win === null) {
          
          
        createWindow();
      }
    });
    
    // 在这个文件后面你可以直接包含你应用特定的由主进程运行的代码。
    // 也可以把这些代码放在另一个文件中然后在这里导入。
    

最后打包出来的应用程序
在这里插入图片描述

这个文件夹就可以给出去啦
但是如果有的需求是整合成一个应用程序包,而不是文件夹
可以查一查资料
后面 如果我有研究后会续上

猜你喜欢

转载自blog.csdn.net/qq_40593656/article/details/109161316