当前位置: 首页 > news >正文

将前后端分离版的前端vue打包成EXE的完整解决方案

将若依前后端分离版的前端打包成EXE的完整解决方案

将若依前后端分离版的Vue前端打包成Windows可执行文件(.exe),同时保持与后端API的通信,需要使用Electron框架来实现。下面是详细的步骤和解决方案。

一、准备工作

1. 环境要求

  • Node.js (推荐v16+)
  • npm 或 yarn
  • 若依前后端分离版的前端代码
  • Git

2. 相关技术栈

  • Vue.js (若依前端使用)
  • Electron (桌面应用打包框架)
  • electron-builder (打包工具)

二、项目改造步骤

1. 安装Electron相关依赖

首先,进入若依前端项目目录,安装Electron相关依赖:

# 进入若依前端项目目录
cd ruoyi-ui# 安装Electron相关依赖
npm install electron electron-builder --save-dev# 安装其他必要的依赖
npm install electron-is-dev electron-store --save

2. 创建Electron主进程文件

在项目根目录创建Electron主进程文件:

const { app, BrowserWindow, Menu, shell, dialog } = require('electron');
const path = require('path');
const isDev = require('electron-is-dev');
const Store = require('electron-store');// 初始化配置存储
Store.initRenderer();
const store = new Store();// 保存主窗口对象的引用
let mainWindow;// 创建主窗口
function createWindow() {// 创建浏览器窗口mainWindow = new BrowserWindow({width: 1280,height: 800,minWidth: 1024,minHeight: 768,icon: path.join(__dirname, '../public/favicon.ico'),webPreferences: {nodeIntegration: true,contextIsolation: false,webSecurity: false, // 允许跨域请求preload: path.join(__dirname, 'preload.js')}});// 加载应用if (isDev) {// 开发环境下加载开发服务器地址mainWindow.loadURL('http://localhost:80');// 打开开发者工具mainWindow.webContents.openDevTools();} else {// 生产环境下加载打包后的index.htmlmainWindow.loadFile(path.join(__dirname, '../dist/index.html'));}// 当窗口关闭时触发mainWindow.on('closed', () => {mainWindow = null;});// 创建菜单createMenu();
}// 创建应用菜单
function createMenu() {const template = [{label: '文件',submenu: [{label: '设置API地址',click: () => {configApiUrl();}},{ type: 'separator' },{label: '退出',accelerator: 'CmdOrCtrl+Q',click: () => {app.quit();}}]},{label: '编辑',submenu: [{ role: 'undo', label: '撤销' },{ role: 'redo', label: '重做' },{ type: 'separator' },{ role: 'cut', label: '剪切' },{ role: 'copy', label: '复制' },{ role: 'paste', label: '粘贴' }]},{label: '视图',submenu: [{ role: 'reload', label: '刷新' },{ role: 'forceReload', label: '强制刷新' },{ role: 'toggleDevTools', label: '开发者工具' },{ type: 'separator' },{ role: 'resetZoom', label: '实际大小' },{ role: 'zoomIn', label: '放大' },{ role: 'zoomOut', label: '缩小' },{ type: 'separator' },{ role: 'togglefullscreen', label: '全屏' }]},{label: '帮助',submenu: [{label: '关于',click: () => {dialog.showMessageBox({title: '关于',message: '若依管理系统桌面版',detail: `版本: ${app.getVersion()}\n若依是一款优秀的开源后台管理系统。`});}},{label: '访问官网',click: () => {shell.openExternal('http://ruoyi.vip');}}]}];const menu = Menu.buildFromTemplate(template);Menu.setApplicationMenu(menu);
}// 配置API地址
function configApiUrl() {// 获取当前API地址const currentApiUrl = store.get('apiUrl') || 'http://localhost:8080';// 显示输入对话框dialog.showInputBox({title: '设置API地址',label: '请输入后端API地址:',value: currentApiUrl,inputAttrs: {type: 'url'},buttons: ['确定', '取消'],defaultId: 0,cancelId: 1}).then(result => {if (!result.canceled && result.text) {// 保存新的API地址store.set('apiUrl', result.text);// 提示用户重启应用dialog.showMessageBox({type: 'info',title: '设置成功',message: 'API地址已更新,请重启应用以应用更改。',buttons: ['重启', '稍后']}).then(res => {if (res.response === 0) {app.relaunch();app.exit(0);}});}}).catch(err => {console.error('设置API地址出错:', err);});
}// 当Electron完成初始化并准备创建浏览器窗口时调用此方法
app.whenReady().then(() => {createWindow();app.on('activate', () => {// 在macOS上,当点击dock图标并且没有其他窗口打开时,// 通常在应用程序中重新创建一个窗口。if (BrowserWindow.getAllWindows().length === 0) {createWindow();}});
});// 当所有窗口关闭时退出应用
app.on('wind
http://www.xdnf.cn/news/772561.html

相关文章:

  • 电脑的ip地址会自动变怎么办?原因解析和解决方法
  • Missashe考研日记—Day51-Day57
  • 软件开发项目管理工具选型及禅道开源版安装
  • docker可视化工具
  • 英文投资理财源码挖矿源码投资理财系统源码(源码下载)
  • 头指针 VS 头节点 VS 首元节点
  • 20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框
  • Linux 中 m、mm、mmm 函数和 make 的区别
  • ⚡️ Linux grep 命令参数详解
  • Python:操作 Excel 格式化
  • 数据库管理-第332期 大数据已死,那什么当立?(20250602)
  • 关于replacedialog控件问题指南
  • JavaSwing中使用JxBroser与JavaScript进行异步通信
  • Rust 变量与可变性
  • 【Day43】
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段(10):语法单词
  • 手机归属地查询接口如何用Java调用?
  • 【存储基础】SAN存储基础知识
  • 专业数据对比工具推荐
  • Python 训练 day40
  • 揭秘 CompletedFuture 的设计精髓(深入实现分析)
  • 九.C++ 对引用的学习
  • 统计随机行走的结构占比
  • JDK21深度解密 Day 12:大规模迁移JDK21方法论
  • PAT-甲级JAVA题解(更新中...)
  • RGB888色彩格式转RGB565格式
  • 海外tk抓包简单暴力方式
  • 从 Windows 7 到 AnduinOS:安装、故障排除与远程控制指南
  • NLP学习路线图(十八):Word2Vec (CBOW Skip-gram)
  • 光伏功率预测 | BiLSTM多变量单步光伏功率预测(Matlab完整源码和数据)