挺详细的记录electron【V 33.2.0】打包vue3项目为可执行程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

前言

一、直接看效果

二、具体步骤

1.安装配置electron

1.将 electron 包安装到应用的开发依赖中。

2.安装electron-packager依赖(打包可执行文件)

3.配置运行选项(package.json)

3.根目录下新建预加载脚本

4.根目录下新建主进程文件

2.解决其他问题

1.指定应用程序的基本公共路径

2.解决token拿不到的问题

3.解决接口访问问题

4.先build,后start或pack

总结


前言

甲方爹:?

我方领导:OJBK👌。

项目基于vue3,要求:封装成win系统可执行程序。


提示:以下是本篇文章正文内容,下面案例可供参考

一、直接看效果

其实很简单,搞定路由和接口请求就行。

二、具体步骤

1.安装配置electron

1.将 electron 包安装到应用的开发依赖中。

npm:

npm install --save-dev electron

yarn:

yarn add --dev electron

2.安装electron-packager依赖(打包可执行文件)

npm:

npm install electron-packager --save-dev

yarn:

yarn add electron-packager --dev

3.配置运行选项(package.json)

"main": "main.js","start": "electron .",
"pack": "electron-packager . --overwrite",

3.根目录下新建预加载脚本

预加载脚本在渲染器进程加载之前加载,并有权访问两个 渲染器全局 (例如 window 和 document) 和 Node.js 环境。下一步main.js中会将此脚本附加到渲染器流程中,在BrowserWindow 构造器中将路径中的预加载脚本传入 webPreferences.preload 选项。

代码:

// 所有的 Node.js API接口 都可以在 preload 进程中被调用.
// 它拥有与Chrome扩展一样的沙盒。
window.addEventListener('DOMContentLoaded', () => {const replaceText = (selector, text) => {const element = document.getElementById(selector)if (element) element.innerText = text}for (const type of ['chrome', 'node', 'electron']) {replaceText(`${type}-version`, process.versions[type])}
})

4.根目录下新建主进程文件

任何 Electron 应用程序的入口都是 main 文件。 这个文件控制了主进程,它运行在一个完整的Node.js环境中,负责控制应用的生命周期,显示原生界面,执行特殊操作并管理渲染器进程。

代码:


// Modules to control application life and create native browser window
const { app, BrowserWindow, Menu } = require('electron/main')
const path = require('node:path')
app.setAppUserModelId('数据包'); // 设置应用名称
let appIcon = 'public/favicon.ico'; // Windows图标路径
function createWindow() {// Create the browser window.const win = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js')},icon: appIcon})Menu.setApplicationMenu(null); // 去掉默认菜单win.loadFile('dist/index.html') // 加载 index.htmlwin.webContents.openDevTools();// 打开开发工具
}// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {createWindow()app.on('activate', () => {// 在 macOS 系统内, 如果没有已开启的应用窗口// 点击托盘图标时通常会重新创建一个新窗口if (BrowserWindow.getAllWindows().length === 0) {createWindow()}})
})// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit()}
})// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件,然后用 require 导入。

2.解决其他问题

1.指定应用程序的基本公共路径

base: '/':如果你的应用程序将部署在服务器的根路径,并且你希望所有静态资源路径都是绝对路径,那么使用 base: '/'

base: './':如果你的应用程序将部署在子目录,或者你需要在本地文件系统中查看构建的 HTML 文件,那么使用 base: './',我们是直接打开访问 index.html 文件,所以选择这个,否则打开会是一片空白。

2.解决token拿不到的问题

3.解决接口访问问题

格式为:http://ip地址:端口号。

4.先build,后start或pack

先运行npm run build:pro打包得到dist,然后运行npm run start或npm run pack进行查看或打包可执行程序。


总结

整个过程下来大概还会存在一些资源打包之后访问不到或者方法报错的情况,需要一一解决,比如css文件访问不到和国际化方法报错,需要配置打开开发工具,打断点一个个解决。

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

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

相关文章

西瓜甜不甜

西瓜甜不甜?有人就会说了,这还不简单,拿把刀,把西瓜劈开,吃两口,你不就知道了。但这有几个问题,值得探讨,我们来看下面这副图: 如果西瓜是在货摊上,是卖主的西…

【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件

sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…

电容的哪些事儿

电容的串并连 电容并联&#xff0c;两电容电压相同&#xff0c;C并C1C2 耐压取较小的&#xff0c;然后再做降额处理 电容串联&#xff0c;两电容电量相同&#xff0c;1/C串1/C11/C2。根据两电容电量相同&#xff0c;Qmin{C1U1,C2U2}&#xff0c;耐压值Umin{C1U1/C2,U2}min{C2…

在 Kibana 中为 Vega Sankey 可视化添加过滤功能

作者&#xff1a;来自 Elastic Tim Bosman 及 Miloš Mandić 有兴趣在 Kibana 中为 Vega 可视化添加交互式过滤器吗&#xff1f;了解如何利用 “kibanaAddFilter” 函数轻松创建动态且响应迅速的 Sankey 可视化。 在这篇博客中&#xff0c;我们将了解如何启用 Vega Sankey 可视…

supervision - 好用的计算机视觉 AI 工具库

Supervision库是一款出色的Python计算机视觉低代码工具&#xff0c;其设计初衷在于为用户提供一个便捷且高效的接口&#xff0c;用以处理数据集以及直观地展示检测结果。简化了对象检测、分类、标注、跟踪等计算机视觉的开发流程。开发者仅需加载数据集和模型&#xff0c;就能轻…

Windows如何安装go环境,离线安装beego

一、安装go 1、下载go All releases - The Go Programming Language 通过网盘分享的文件&#xff1a;分享的文件 链接: https://pan.baidu.com/s/1MCbo3k3otSoVdmIR4mpPiQ 提取码: hxgf 下载amd64.zip文件&#xff0c;然后解压到指定的路径 2、配置环境变量 需要新建两个环境…

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中&#xff0c;集合类&#xff08;Collections&#xff09;是构建高效程序的核心组件之一&#xff0c;而 List 接口作为集合框架中的重要一员&#xff0c;是一个有序、可重复的元素集合。与 Set 接口不同&#xff0c;List 保证了元素的顺序性&#xff0c;并允许存…

Linux shell的七大功能---输入输出重定向 << >> < >

1、输出定向符 >&#xff08;覆盖&#xff09; 命令>文件 以覆盖的形式&#xff0c;将命令正确的输出结果写入进文件 例&#xff1a;“who命令”将当前的Linux服务器系统使用者等信息显示出来 &#xff08;使用“ Ctrl Alt F mun ”切换到命令行界面&#xff0…

实战 | 某院校小程序记录

视频教程在我主页简介里 目录&#xff1a; 前言&#xff1a; 渗透思路 1.绕过前端 2.信息泄露 3.爆破用户账号密码 4.信息泄露2 结束 前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#xff0c;奇葩弱口令离…

debian12学习笔记

前置条件 基于debian12官网的qcow2格式文件进行操作 安装ssh 登录虚拟机后安装ssh服务端 apt install openssh-server配置国内源 新增/etc/apt/sources.list.d/tsinghua.list 使用清华大学的源 https://www.cnblogs.com/shanhubei/p/18104430 deb https://mirrors.tuna.t…

ansible自动化运维(三)jinja2模板roles角色管理

相关文章ansible自动化运维&#xff08;一&#xff09;简介及清单,模块-CSDN博客ansible自动化运维&#xff08;二&#xff09;playbook模式详解-CSDN博客ansible自动化运维&#xff08;四&#xff09;运维实战-CSDN博客 三.Ansible jinja2模板 Jinja2是Python的全功能模板引…

数据结构 (35)分配类排序

前言 分配类排序是数据结构中的一种重要排序方法&#xff0c;其核心思想是利用分配和收集过程对元素进行排序&#xff0c;而无需比较元素之间的关键字。这种方法突破了基于关键字比较的排序算法的时间下界&#xff0c;可以达到线性时间复杂度O(n)。 一、分配类排序的基本概念 分…

微信小程序跳转其他小程序以及跳转网站

一、跳转其他小程序 1.1 知道appid和页面路径 wx.navigateToMiniProgram({appId: appid, // 替换为目标小程序 AppIDpath: pathWithParams, // 小程序路径envVersion: release, // 开发版、体验版或正式版success(res) {console.log("跳转到其他小程序成功&#xff01;&q…

利用卷积神经网络进行手写数字的识别

数据集介绍 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;数据集是一个广泛使用的手写数字识别数据集&#xff0c;常用于机器学习和计算机视觉领域中的分类任务。它包含了从0到9的手写数字样本&#xff0c;常用于训练和测试各种图像…

Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块

文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示&#xff1a; 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层&#xff08;Fully Connected Layer&#xff09;有时也…

前端(async 和await)

1 async async 将 function 变为成为 async 函数 ●async 内部可以使用 await&#xff0c;也可以不使用&#xff0c;因此执行这个函数时&#xff0c;可以使用 then 和 catch 方法 ●async 函数的返回值是一个 Promise 对象 ●Promise 对象的结果由 async 函数执行的返回值决…

Java-25 深入浅出 Spring - 实现简易Ioc-01 Servlet介绍 基本代码编写

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

H.323音视频协议

概述 H.323是国际电信联盟&#xff08;ITU&#xff09;的一个标准协议栈&#xff0c;该协议栈是一个有机的整体&#xff0c;根据功能可以将其分为四类协议&#xff0c;也就是说该协议从系统的总体框架&#xff08;H.323&#xff09;、视频编解码&#xff08;H.263&#xff09;、…

WPF+MVVM案例实战与特效(四十)- 一个动态流水边框的实现

文章目录 1、运行效果2、案例实现1、PointAnimationUsingKeyFrames 关键帧动画2、矩形流水边框案例2、运行效果3、关键技术点3、案例拓展:其他形状实现1、圆形流水边框2、心形流水边3、完整页面代码4、运行效果5、总结1、运行效果 2、案例实现 1、PointAnimationUsingKeyFram…

微信小程序--创建一个日历组件

微信小程序–创建一个日历组件 可以创建一个日历组件&#xff0c;来展示当前月份的日期&#xff0c;并支持切换月份的功能。 一、目录结构 /pages/calendarcalendar.wxmlcalendar.scsscalendar.jscalendar.json二、calendar.wxml <view class"calendar"><…