vue项目使用electron打包成桌面应用

news2025/6/13 21:08:11

学习关键语句
使用electron打包vue项目
electron制作桌面应用

写在前面

很想使用 electron 制作一个桌面应用,但是真的上手使用的时候才发现 electron 的坑实在是太多了
先将遇到的坑记录在这里,遇到一个记录一个

  • 使用 9 以上版本的 vue-i18n 的项目打包成应用时会失败,本地运行没问题
  • 项目路径中有中文会打包失败

和 electron 相关的插件版本更替实在是是太快,并且版本之间还不一定能兼容,所以这篇文章中使用到的插件都会写死版本来保证一定可以打包成功

开始

项目开始

我们不从零开始,直接从之前的项目中拉一个文件来作为例子,你可以点击这里进行下载项目,不需要积分
值得一提的是,这篇文章不会提供完整的文件,你可以使用下载的项目开始学习

安装依赖

  • 安装指定版本 此时日期为 2023-04-11
npm i electron@24.0.0 -D
npm i vite-plugin-electron@0.11.1 -D
npm i electron-builder@23.6.0 -D
npm i cross-env@7.0.3
  • 针对项目由 vite 创建的 vue3 项目

修改 vite.config.ts

变动语句

vite.config.ts 变动

import electron from 'vite-plugin-electron'

electron({
    entry: "dist-electron/index.js"
})

放入语句

vite.config.ts 放入

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: "dist-electron/index.js"
    })
  ],
})

修改完成后,会自动在项目根目录出现 dist-electron 文件夹,文件夹内有一个文件 index.js

如果没有自动出现,那就手动创建

修改 index.js

index.js

import { app, BrowserWindow } from 'electron'
import path from 'path'
// app 控制应用程序的事件生命周期。
// BrowserWindow 创建并控制浏览器窗口。
let win;
// 定义全局变量获取 窗口实例
const createWindow = () => {
    win = new BrowserWindow({
        webPreferences: {
            devTools: true,
            contextIsolation: false,
            nodeIntegration: true
            // 允许html页面上的javascipt代码访问nodejs 环境api代码的能力(与node集成的意思)
        }
    })
    if (process.env.NODE_ENV != 'development') {
        win.loadFile(path.join(__dirname, "../dist/index.html"));
    } else {
        // vite-plugin-electron@0.11.1版本使用以下
        win.loadURL(`${process.env['VITE_DEV_SERVER_URL']}`)
    }
}
//在Electron完成初始化时被触发
app.whenReady().then(createWindow)

修改 package.json

  • 删除 “type”: “module”
  • “name” 同级添加 “main”: “dist-electron/index.js”,
  • 将 script 中的 dev 指令修改为 cross-env NODE_DEV=development vite
  • 将 script 中的 build 指令修改为 vue-tsc --noEmit && vite build && electron-builder

将以下添加到 “name” 同级

  "build": {
    "appId": "com.electron.desktop",
    "productName": "electron",
    "asar": true,
    "copyright": "Copyright © 2023 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:8086"
      }
    ],
    "releaseInfo": {
      "releaseNotes": "版本更新的具体内容"
    }
  }

本地测试

npm run dev

会自动打开

打包成 exe 文件

npm run build

输出在项目根目录下新建的文件夹 release 中,双击 exe 文件进行安装就可以打开了

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有哪些适合学生党或打工人的AI工具?

以下是一些适合学生党或打工人使用的AI工具: 1. Grammarly:用于检查语法和拼写错误的AI写作助手。 2. Duolingo:一款免费的AI语言学习应用程序,适合学习不同语言。 3. Quizlet:一种在线学习工具,用于创建、…

FE_CSS 复合选择器 元素显示模式 CSS背景

1 CSS 的复合选择器 1.1 后代选择器 后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。 元素1 元素2 {…

MyBatis多表查询+动态sql

文章目录MyBatis多表查询1. 多表一对一查询2. 多表一对多动态SQL1.\<if\>标签2.\<trim\>标签3. \<where\>标签4.\<set\>标签5. \<foreach\>标签MyBatis多表查询 在全局配置文件中中设置MyBatis执行日志 mybatis:configuration:log-impl: org.a…

如何使用手机远程锁定电脑?

​“有时我已经到家了&#xff0c;却忘记锁上我的公司的电脑。每次我都害怕我电脑上的数据丢失。我可以在手机上远程锁定我的Windows计算机以避免这个问题吗&#xff1f;” 答案是肯定的&#xff01;很多人可能会遇到同样的下班不锁电脑的问题&#xff0c;有的人可能尝…

AOP执行顺序

AOP执行顺序 下面是个人的一点总结&#xff01;理解可能存在欠缺欢迎批评指正 1.AOP相关概念 Aspect&#xff1a;切面&#xff0c;由连接点和增强组成的。Aspect注解进行标识。Join point&#xff1a;连接点。代表一次方法的执行。Advice&#xff1a;增强。在连接点执行的操作。…

微服务+springcloud+springcloud alibaba学习笔记【Eureka服务注册中心】(3/9)

Eureka服务注册中心 3/91、服务注册与发现1.1 什么是服务治理&#xff1a;1.2 什么是服务注册与发现&#xff1a;1.3 Eureka服务注册与发现2、单机版eureka2.1 创建module2.2改pom依赖2.3写yml配置文件:2.4主启动类2.5 修改服务提供者 cloud-provider-payment8001 模块&#xf…

软件测试工作主要做什么

随着信息技术的发展和普及&#xff0c;人们对软件的使用越来越普及。但是在软件的使用过程中&#xff0c;软件的效果却不尽如人意。为了确保软件的质量&#xff0c;整个软件业界已经逐渐意识到测试的重要性&#xff0c;也有越来越多的小伙伴加入了软件测试这个行业中来。软件测…

微积分——极值定理的证明

1. 提出问题 极值定理(The Extreme Value Theorem)最初是由捷克数学家波尔查诺(Bernard Bolzano(1781年10月5号-1848年11月18号), 他是一位意大利血统的波希米亚数学家、逻辑学家、哲学家、神学家和天主教神父&#xff0c;也以其自由主义观点而闻名)证明&#xff0c;在1830年代…

基于t-SNE的Digits数据集降维与可视化

基于t-SNE的Digits数据集降维与可视化 描述 t-SNE(t-分布随机邻域嵌入)是一种基于流形学习的非线性降维算法&#xff0c;非常适用于将高维数据降维到2维或者3维&#xff0c;进行可视化观察。t-SNE被认为是效果最好的数据降维算法之一&#xff0c;缺点是计算复杂度高、占用内存…

高效时间管理日历 DHTMLX Event Calendar 2.0.3 Crack

DHTMLX Event Calendar用于高效时间管理的轻量级 JavaScript 事件日历 DHTMLX 可帮助您开发类似 Google 的 JavaScript 事件日历&#xff0c;以高效地组织约会。 用户可以通过拖放来管理事件&#xff0c;并以六种不同的模式显示它们。 JavaScript 事件日历功能 轻的简单的 Java…

UDP/TCP的相关性你知道几个?

TCP/IP网络原理——主要围绕UDP/TCP进行讲解 文章目录TCP/IP网络原理——主要围绕UDP/TCP进行讲解应用层传输层UDP/TCPTCP丢包总结应用层 网络协议的五层协议分别是应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层&#xff0c;这五层构成…

【STL十】关联容器——set容器、multiset容器

【STL十】关联容器——set容器、multiset容器一、set简介二、头文件三、模板类四、set的内部结构五、成员函数1、迭代器2、元素访问3、容量4、修改操作~~5、操作~~5、查找6、查看操作六、demo1、查找find2、修改操作insert3、修改操作erase、clear七、multisetset和multiset会根…

linux四剑客 grep awk sed find

Grep 过滤来自一个文件或标准输入匹配模式内容。 除了grep外&#xff0c;还有egrep、fgrep。egrep是grep的扩展&#xff0c;相当于grep -E。fgrep相当于grep -f&#xff0c;用的少。 Usage: grep [OPTION]… PATTERN [FILE]… 支持的正则描述-E&#xff0c;–extended-regexp…

爱智EdgerOS之深入解析VSCode的EdgerOS插件

一、安装插件 EdgerOS 插件是一个专门为应用开发者提供的在 EdgerOS 下提供应用构建、应用部署、应用更新等功能的插件&#xff0c;同时它还可以监视爱智应用的执行状态&#xff0c;方便开发者更好地调试应用。EdgerOS 插件需要在 VSCode 的 “拓展” 中下载安装&#xff0c;如…

vue-vue2和vue3的diff算法

核心要点 数据变化时&#xff0c;vue如何更新节点虚拟DOM 和 真实DOM 的区别vue2 diff 算法vue3 diff 算法 一、 数据变化时&#xff0c;vue如何更新节点 首先渲染真实DOM的开销是很大&#xff0c;比如有时候我们修改了某个数据且修改的数据量很大时&#xff0c;此时会频繁的…

自学编程的5大误区,早知道早避坑,过来人的宝贵经验

前言 有的人自学很快&#xff0c;几乎一个多月就能掌握一门技术&#xff0c;而有的人苦苦坚持&#xff0c;最后还是半途而废&#xff0c;很大的原因就在于在学习的时候掉进了一些误区没能走出来。 今天我们就来讲讲自学编程常见的5大误区&#xff0c;避开这些误区我们定能在自…

【Java Web】014 -- SpringBoot原理(配置优先级、Bean管理、SpringBoot原理)

目录 一、配置优先级 1、配置&#xff08;3种&#xff1a;.properties、yml、yaml&#xff09; ①、配置文件优先级 ②、如何指定Java系统属性和命令行参数 ③、5种配置文件的优先级 二、Bean管理 1、获取bean&#xff08;3种方法&#xff09; 2、bean作用域&#xff08;5种&am…

Arduino开发之如何连接超声波模块?

文章目录0、引言1、超声波模块说明2、代码编写3、功能演示0、引言 在利用Arduino开发过程中&#xff0c;若需知道设备与周围环境的距离&#xff0c;可利用超声波模块测量短程距离&#xff0c;使运动设备感知周围环境。本文在【Arduino如何进行开发&#xff1f;】基础上&#xf…

探索树形数据结构,通识树、森林与二叉树的基础知识(专有名词),进一步利用顺序表和链表表示、遍历和线索树形结构

树与二叉树 1.树 1.树形结构(非线性结构) 结点之间有分支&#xff0c;具有层次关系 树的定义&#xff1a; 树(tree)是n(n≥0)个有限集。 若n 0&#xff0c;则称为空树&#xff1b; 若n > 0&#xff0c;则它满足如下两个条件&#xff1a; 有且仅有一个特定的称为根(Ro…

NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032

然后首先我们来看一下hdfs中的数据的格式可以看到,还是json的格式对吧 而且也没有回行 然后我们来操作,首先添加一个evaluateJsonPath处理器 可以看到找到这个处理器 添加以后,我们去配置 ​​​​​​​ 点击去配置evaluateJsonPath处理器 可以看到首先我们destination这里配…