vite结合electron构建前端桌面应用程序

 更新时间:2023年05月23日 16:27:48   作者:aibujin  
本文主要介绍了vite结合electron构建前端桌面应用程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、创建 vite 项目

npm

npm create vite@latest

yarn

yarn create vite

选择是否继续

Need to install the following packages:
  create-vite@3.2.1
Ok to proceed? (y) y

项目名称

Project name: » vite-project

选择框架

Select a framework: » - Use arrow-keys. Return to submit.
>   Vanilla
    Vue
    React
    Preact
    Lit
    Svelte
    Others

选择项目语言

Select a framework: » - Use arrow-keys. Return to submit.
>   Vanilla
    Vue
    React
    Preact
    Lit
    Svelte
    Others

项目构建成功,根据提示进入项目目录,安装依赖

Done. Now run:
  cd vite-project
  npm install
  npm run dev

二、构建 Electron 项目

electron 官网:https://www.electronjs.org/zh/docs/latest/

vite-plugin-electron :https://github.com/electron-vite/vite-plugin-electron

安装依赖(electron 安装比较慢,耐心等待即可)

npm install electron -D
npm install vite-plugin-electron -D 

编写 Electron 入口文件,创建 electron/main.ts,与 src 目录同级

// app 控制应用程序的事件生命周期(相当于应用程序)
// BrowserWindow 创建并控制浏览器窗口(相当于打开桌面弹框)
import { app, BrowserWindow, Menu } from 'electron'
import path from 'path'
// 定义全局变量,获取窗口实例
let win: BrowserWindow | null;
/**
 * 创建一个窗口
 */
const createWindow = () => {
    win = new BrowserWindow({
        width: 1200,
        height: 800,
        center: true,
        // autoHideMenuBar: true,
        backgroundColor: 'rgb(0, 0, 0)',
        webPreferences: {
            devTools: true,
            // 集成网页和 Node.js,也就是在渲染进程中,可以调用 Node.js 方法
            nodeIntegration: true,
            contextIsolation: false,
        }
    })
    // You can use `process.env.VITE_DEV_SERVER_URL` when the vite command is called `serve`
    if (process.env.VITE_DEV_SERVER_URL) {
        win.loadURL(process.env.VITE_DEV_SERVER_URL)
    } else {
        // Load your file
        win.loadFile(path.resolve(__dirname, '../dist/index.html'));
    }
    // 关闭窗口时就关闭程序,避免占用过多资源
    win.on("close", () => {
        win = null
    })
}
// 自定义菜单
const createMenu = () => {
    const Menus: any = [
        {
            label: 'Files',
            submenu: [
                {
                    label: '网页版',
                    role: 'help',
                    submenu: [{
                        label: '网页版',
                        click: function () {
                            alert('网页版')
                        }
                    }]
                },
                {
                    label: '帮助',
                    role: 'help',
                    submenu: [{
                        label: '帮助文档',
                        click: function () {
                            alert('帮助文档')
                        }
                    }]
                }
            ]
        }
    ];
    const mainMenu = Menu.buildFromTemplate(Menus);
    Menu.setApplicationMenu(mainMenu);
}
// 初始化app(在 Electron 完成初始化时触发),挂载上面创建的 桌面应用程序窗口
app.whenReady().then(() => {
    createWindow()
    // createMenu()
})

在 vite.config.ts 中,配置 Electron 入口文件(注意:vite-plugin-electron 版本不同,electron 配置可能不一样)

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import electron from 'vite-plugin-electron'
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        electron({
            entry: 'electron/main.ts',
        }),
    ],
})

在 package.json 中,增加 main 字段,去掉 type 字段

🚨 默认情况下, electron 文件夹下的文件将会被构建到 dist-electron(注意:vite-plugin-electron 版本不同,构建的文件夹也可能不同)

🚨 目前, Electron 尚未支持 “type”: “module”,需要去掉 type 字段

"main": "dist-electron/main.js",

运行项目

npm run dev

vite + electron 构建前端桌面应用程序

三、打包 Electron 桌面程序

安装打包依赖 electron-builder

npm install electron-builder -D 

在 package json 中,配置 build 命令

"build": "vue-tsc --noEmit && vite build && electron-builder"

修改 package.json,增加 electron-builder 相关配置

🚨 注意:下面 build/files中,dist/**/* 是项目打包文件,dist-electron/**/* 是 Electron 入口文件,插件版本不同所构建的文件夹可能不同 

"build": {
    "appId": "com.electron.desktop",
    "productName": "electron",
    "asar": true,
    "copyright": "Copyright © 2022 electron",
    "directories": {
        "output": "release/"
    },
    "files": [
        "dist/**/*",
        "dist-electron/**/*"
    ],
    "mac": {
        "artifactName": "${productName}_${version}.${ext}",
        "target": [
            "dmg"
        ]
    },
    "win": {
        "target": [
            {
                "target": "nsis",
                "arch": [
                    "x64"
                ]
            }
        ],
        "artifactName": "${productName}_${version}.${ext}"
    },
    "nsis": {
        "oneClick": false,
        "perMachine": false,
        "allowToChangeInstallationDirectory": true,
        "deleteAppDataOnUninstall": false
    },
    "publish": [
        {
            "provider": "generic",
            "url": "http://127.0.0.1:8080"
        }
    ],
    "releaseInfo": {
        "releaseNotes": "版本更新的具体内容"
    }
},

执行打包,安装应用

npm run build

🚨 解决办法:关闭电脑管家、360或者别的杀毒软件即可;

打包成功后,生成的文件都放到了 release 目录下(之前在 package.json 里是这么配置的)

点击 electron_0.0.0.exe ,安装即可;

安装之后运行程序,页面没有出来,控制台有错

看到这个错首先我们找到 release/win-unpacked/resources,找到 app.asar 然后解压 app.asar

安装 asar 工具

npm install -g asar

asar 的压缩与解压

解压:asar extract app.asar app

asar extract 源app.asar文件 目标解压文件夹

压缩:asar pack app app.asar

asar pack 源解压文件夹 目标asar压缩文件名(app.asar)

解压之后可以看到 dist-electron 和 dist 是同一级的,修改 electron/main.ts 即可

win.loadFile(path.resolve(__dirname, '../dist/index.html'));

四、项目地址

项目地址:https://github.com/aibuijn/vite-electron

到此这篇关于vite结合electron构建前端桌面应用程序的文章就介绍到这了,更多相关vite electron构建桌面应用程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解vue或uni-app的跨域问题解决方案

    详解vue或uni-app的跨域问题解决方案

    这篇文章主要介绍了详解vue或uni-app的跨域问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Node.js path模块,获取文件后缀名操作

    Node.js path模块,获取文件后缀名操作

    这篇文章主要介绍了Node.js path模块,获取文件后缀名操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Vue.js 中的 v-show 指令及用法详解

    Vue.js 中的 v-show 指令及用法详解

    v-show 指令通过改变元素的 css 属性(display)来决定元素是显示还是隐藏。这篇文章主要介绍了Vue.js 中的 v-show 指令及用法详解,需要的朋友可以参考下
    2018-11-11
  • 如何在vue中使用HTML 5 拖放API

    如何在vue中使用HTML 5 拖放API

    这篇文章主要介绍了如何在vue中使用HTML 5 拖放API,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2021-01-01
  • element 表格嵌套表单验证指定行的操作方法

    element 表格嵌套表单验证指定行的操作方法

    这篇文章主要介绍了element 表格嵌套表单验证指定行的操作方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • element中el-table表头通过header-row-style设置样式

    element中el-table表头通过header-row-style设置样式

    有些时候需要给element-ui表头设置不同样式,本文主要介绍了element中el-table表头通过header-row-style设置样式,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 深入理解Vue官方文档梳理之全局API

    深入理解Vue官方文档梳理之全局API

    本篇文章主要介绍了深入理解Vue官方文档梳理之全局API,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 利用vue3仿苹果系统侧边消息提示效果实例

    利用vue3仿苹果系统侧边消息提示效果实例

    这篇文章主要给大家介绍了关于如何利用vue3仿苹果系统侧边消息提示效果的相关资料,文中通过实例代码以及图文介绍的非常详细,对大家学习或者使用vue3具有一定的参考学习价值,需要的朋友可以参考下
    2021-12-12
  • vue3通过canvas实现图片圈选功能

    vue3通过canvas实现图片圈选功能

    这篇文章将给大家详细介绍了vue3如何通过canvas实现图片圈选功能,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴快来跟随小编一起学习一下吧
    2023-12-12
  • vue3 使用setup语法糖实现分类管理功能

    vue3 使用setup语法糖实现分类管理功能

    这篇文章主要介绍了vue3 使用setup语法糖实现分类管理,本次模块使用 vue3+element-plus 实现一个新闻站的后台分类管理模块,其中新增、编辑采用对话框方式公用一个表单,需要的朋友可以参考下
    2022-08-08

最新评论