electron打包Vue前端

Electron-Forge 打包Vue项目

效果:electronforge可将前端静态页面打包成.exe、.deb和.rpm等,能适配各种平台

  • 示例:Windows环境下将前端 Vue 项目打包成exe文件

  • 打包后的 exe 文件
    在这里插入图片描述

  • 运行 exe 文件
    在这里插入图片描述

一、项目准备

开源项目 RouYi 下载

  1. 本地环境
# 环境版本信息
node -v  # v20.11.1
npm -v  # 10.2.4# 设置源
npm config set registry https://registry.npmmirror.com/# 查看 node 源
npm config get registry
  1. 安装依赖
# 切换到Vue前端项目
cd ruoyi-ui
# 安装Vue所需依赖
npm install
# 运行 Vue 项目
npm run dev
  1. 报错
  • 3.1 原因:Node版本高了
    项目启动失败

  • 3.2 修改 package.json
    在这里插入图片描述

  • 3.3 修改后的 package.json

  "scripts": {"dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve","build:prod": "vue-cli-service build","build:stage": "vue-cli-service build --mode staging","preview": "node build/index.js --preview","lint": "eslint --ext .js,.vue src"}, 

二、项目配置

2. 修改项目配置

ruoyi-ui 下的配置修改

2.1 .env.production
# 修改前
VUE_APP_BASE_API = '/prod-api'# 修改后(与后端保持一致)
VUE_APP_BASE_API = 'http://localhost:8080'
2.2 vue.config.js
# 修改前:静态资源路径
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",# 修改后
publicPath: './',# 实际接口地址与后端Sprintboot项目保持一致
target: `http://localhost:8080`,
2.3 修改路由配置

进入 ruoyi-ui/src/router/index.js

# 修改前:url不带#
mode: 'history'# 修改后:url带#
mode: 'hash'
2.4 全局修改Cookies为localStorage

由于打包成exe或deb这类可执行文件后,本地是没有 Cookies

在这里插入图片描述

  1. 全局搜索Cookies.get并替换为localStorage.getItem
    在这里插入图片描述

  2. 全局搜索Cookies.set并替换为localStorage.setItem
    在这里插入图片描述

  3. 全局搜索Cookies.remove并替换为localStorage.removeItem

  4. 进入ruoyi-ui/src/views/login.vue

  • 修改前
localStorage.setItem("username", this.loginForm.username, { expires: 30 });
localStorage.setItem("password", encrypt(this.loginForm.password), { expires: 30 });
localStorage.setItem('rememberMe', this.loginForm.rememberMe, { expires: 30 });
  • 修改后
localStorage.setItem("username", this.loginForm.username);localStorage.setItem("password", encrypt(this.loginForm.password));localStorage.setItem('rememberMe', this.loginForm.rememberMe);
2.5 退出登录白页问题

进入 ruoyi-ui/src/layout/components/Navbar.vue

  • 修改前
    退出登录路由跳转

  • 修改后

    async logout() {this.$confirm('确定注销并退出系统吗?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.$store.dispatch('LogOut').then(() => {this.$router.push('/login')})}).catch(() => {});}

三、开始打包

3.1 打包 Vue
npm run build:prod
  • 报错
    node版本冲突

  • 原因
    node版本过高

  • 解决方案
    进入 ruoyi-ui/package.json

  • 修改前
    在这里插入图片描述

  • 修改后

"scripts": {"dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve","build:prod": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build","build:stage": "vue-cli-service build --mode staging","preview": "node build/index.js --preview","lint": "eslint --ext .js,.vue src"},

以上配置修改后,重新执行打包命令

npm run build:prod

打包好后出现 ruoyi-ui/dist 文件夹
打包后的前端资源

3.1 下载 electron 骨架项目

第一步:下载把electron官方例子

git clone https://github.com/electron/electron-quick-start 

第二步:配置项目

  • 2.1 删除 index.htmlpackage-lock.json

在这里插入图片描述

  • 2.2 将 Vue 打包后的dist放入项目 electron-quick-start 根目录上

在这里插入图片描述

  • 2.3 入口文件 main.js ,修改打包的文件路径为我们的index.html
// 原始内容 
mainWindow.loadFile('index.html') // 修改后的内容 
mainWindow.loadFile('./dist/index.html') 
  • 2.4 进入 package.json
// 原始内容 "devDependencies": {"electron": "^29.2.0"}
// 修改后的内容 "devDependencies": {}

第三步:安装依赖

  • 2.1 配置npm

如果不配置,为 electron-quick-start 项目下载 electron 超级慢,甚至下载失败!!!

寻找电脑上的 .npmrc:默认c盘下
在这里插入图片描述

Everything是一款在系统中快速搜索文件的软件

.npmrc 中添加最后两行

prefix=D:\Environment\nodejs\node_global
cache=D:\Environment\nodejs\node_cache
registry=https://registry.npmmirror.com/disturl=https://registry.npmmirror.com/-/binary/node
electron_mirror=https://registry.npmmirror.com/-/binary/electron/
  • 下载依赖
npm install --save-dev electron
npm install --save-dev @electron-forge/cli
npm exec --package=@electron-forge/cli -c "electron-forge import"
npm install --save-dev @electron-forge/plugin-fuses
  • 控制台输出

在这里插入图片描述

# 运行预览打包后的exe
npm run start
# 构建分发包形成单个exe
npm run make
  • Windows下成功打包exe
    在这里插入图片描述

electron-forge 会检测当前系统是Windows,还是Linux,最终分发成.exe、.deb或.rpm都是看你当前执行 npm run make

# 当然你可以强制修改平台,通过添加参数platform"scripts": {"start": "electron-forge start","package": "electron-forge package","make": "electron-forge make --platform=linux"},

But ERROR
在这里插入图片描述

Windows 上打包成 .deb不被允许

依据 electronforge 官网解释

Electron Forge 官网 deb 描述
在这里插入图片描述

你只能在 Linux 或者 macOS操作系统上打包 deb 文件,因此 Windows 操作系统下无法构建.deb的哦!!!

参考网站:

  1. electronforge官网

  2. ruoyi-vue | electron打包教程(超详细)

  3. 将Vue项目打包为Windows应用(.exe)

  4. electron-forge 流水线踩坑记录

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

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

相关文章

码蹄集部分题目(第五弹;OJ赛2024年第10期)

🐋🐋🐋竹鼠通讯(钻石;分治思想;模板题:就算几何平面点对问题) 时间限制:3秒 占用内存:128M 🐟题目描述 在真空中,一块无限平坦光滑…

自偏置电流镜、wilson和cascode电流镜、低压自偏置电流镜

1.自偏置电流镜 参考1:正确偏置和自启动电路 正确偏置: 2.自启动电路 参考2:两种自启动电路、cascode低压设计、自启动充放电过程分析 3.低压自偏置电流镜 参考3:电阻偏置分析 VbVgs3VodVgs1Vod 4.电阻偏置和MOS偏置的分…

【C++】动态规划算法

目录 还会持续更新动态规划斐波那契模型三步问题最小花费爬楼梯 路径问题不同路径路径问题Ⅱ 简单多状态按摩师 还会持续更新 动态规划 什么是动态规划? 斐波那契模型 三步问题 class Solution { public: const int N 1000009;int waysToStep(int n) {if(n1) …

服务器远程桌面连接不上怎么办?

随着互联网的发展和远程办公的兴起,服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况,这时候我们需要找到解决办法,确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…

前端二维码工具小程序使用说明书

一、产品概述 前端二维码工具小程序是一款便捷、高效、易用的二维码生成与识别工具。本产品支持根据用户输入的文本或链接生成二维码,同时提供扫一扫功能以识别二维码内容,并支持将识别到的内容复制到剪贴板。此外,产品还提供了美化功能&…

Armadillo库:用于线性代数和科学计算的快速C/C++库下载及vs环境下的使用方法

armadillo库的下载及使用 一. armadillo库的下载二. vs2022环境下armadillo库的基本使用方法 一. armadillo库的下载 armadillo库的官方下载连接: https://arma.sourceforge.net/download.html 选择网页中最新版本的armadillo库压缩包文件进行下载。 解压armadillo-12.8.2.ta…

无重复的最长字串

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 问题 给定一个字符串,我们需要找到该字符串中的最长无重复子串的长度。 示例 让我们以一个具体的示例来说明这个问题&#…

场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)

怎么读论文 在第一遍阅读的时候,只需要看题目,摘要和结论,先看题目是不是跟我的方向有关,看摘要是不是用到了我感兴趣的方法,看结论他是怎么解决摘要中提出的问题,或者怎么实现摘要中的方法,然…

Elementplus 2.6.1表单校验模块开发体验改进

需求 之前的表单代码看了下,写的比较冗长,于是去万能的Github找点轮子,发现了这个: GitHub - aweiu/element-ui-verify: 如果你受够了饿了么ElementUI原生的校验方式,那就来试试它吧!一款更懂你的校验插件…

Taro框架中的H5 模板基本搭建

1.H5 模板框架的搭建 一个h5 的基本框架的搭建 基础template 阿乐/H5 Taro 的基础模板

Java多线程实战-从零手搓一个简易线程池(四)线程池生命周期状态流转实现

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️本系列源码仓库:多线程并发编程学习的多个代码片段(github) 🏷️个人学习笔记,若有缺误,欢迎评论区指正…

nexus设置s3存储

问题 因为我的nexus是安装在EC2上面,需要利用s3的存储能力,为nexus提供存储服务。 步骤 准备s3桶 输入桶名,创建s3桶,如下图: 创建桶读写策略 具体内容如下: {"Version": "2012-10-1…

c++之代码编译问题

为什么头文件不是编译的对象 1、头文件与包含指令(#include) 那些没有被项目中任何源文件包含的头文件,编译器是不去理会它的,不管它有没有语法错误,也不管它是否已添加到项目中。 2、包含指令的执行 包含指令是一种预编译指令,它…

如何区别进化和演化

在生物学中,"进化"和"演化"这两个词通常可以互换使用,它们都指的是生物种群随时间推移而发生的遗传变化。然而,在某些语境中,这两个词可能会有细微的差别: 进化(Evolution)…

[翻译] 在 CI 或测试环境中使用 Docker-in-Docker,三思而后行

发布日期:2024-04-08 18:01:01 原文地址:Using Docker-in-Docker for your CI or testing environment? Think twice. Docker-in-Docker 的主要目的是帮助 Docker 本身的开发。许多人使用它来运行 CI(例如使用 Jenkins)&#xf…

[NKCTF2024]-PWN:leak解析(中国剩余定理泄露libc地址,汇编覆盖返回地址)

查看保护 查看ida 先放exp 完整exp: from pwn import* from sympy.ntheory.modular import crt context(log_leveldebug,archamd64)while True:pprocess(./leak)ps[101,103,107,109,113,127]p.sendafter(bsecret\n,bytes(ps))cs[0]*6for i in range(6):cs[i]u32(p…

Java 基于微信小程序的校园请教小程序的研究与实现,附源码

博主介绍:✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅&#x1f447…

SpringBoot整合Spring Data JPA

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合Spring Data JPA 📚个人知识库: Leo知识库,欢迎大家访问 1.…

淘宝销量API商品详情页原数据APP接口测试㊣

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地…

Java-StringBuilder容器

一、基础用法 1.创建对象 StringBuilder sbnew StringBuilder(); 2.添加元素 可以添加整型、浮点型、字符串等。 sb.append(1); sb.append(2.3); sb.append(true); 3.反转 sb.reverse(); 4.获取长度 int len sb.length(); 5.转变成字符串 tring strsb.toString(); …