使用electron将vue3网页项目包装成pc客户端

    • 一、准备前工作
      • 在项目的根目录 打开命令行工具 安装四个依赖库
      • 安装报错的话
    • 二、准备工作完成之后,在项目根目录需要有俩个文件
      • 在项目根目录创建electron文件夹
      • 在vite.config.js中添加配置项
      • 在package.json中添加配置项
      • 运行命令 npm run electron:build 打包
      • 关于mac,win和nsis配置 完整说明
    • 打包成功后的输出的文件目录,及安装界面展示

一、准备前工作

在项目的根目录 打开命令行工具 安装四个依赖库

electron-builder: 是执行命令打包成客户端所需要的工具
cross-env:该库让开发者只需要注重环境变量的设置,而无需担心平台设置
wait-on:等待资源,此处用来等待url可访问

npm install --save-dev electron electron-builder cross-env wait-on

安装报错的话

如果安装electron第三方库失败: 是因为:electron的安装并不依赖本地npm中registry所配置的镜像,需要增加名称为electron_mirror的镜像源
可按照一下方法执行:
1、cmd窗口执行:

 npm config edit

2、执行此命令之后会有弹出一个配置文件,只需将以下内容粘贴进配置文件保存即可

registry=https://registry.npmmirror.com
electron_mirror=https://cdn.npmmirror.com/binaries/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/

如图所示:
CSDN_img
3、粘贴保存之后,删除项目的node_modules文件夹
4、关闭cmd窗口,重新打开一个cmd(重新启动)
5、清除npm缓存

npm cache clean --force

6、重新安装第三方库

npm install --save-dev electron electron:build

二、准备工作完成之后,在项目根目录需要有俩个文件

俩个文件分别是main.js(主进程)、preload.js(渲染进程)。

在项目根目录创建electron文件夹

在项目根目录创建electron文件夹,里面存放main.jspreload.js俩js文件
为什么需要将main.js和preload.js放在项目根目录的某个文件夹下。因为在vue项目中也存在一个main.js文件避免搞混淆

// pc客户端main.js(主进程)
const { app, BrowserWindow, Menu } = require("electron");
const path = require("path");
const NODE_ENV = process.env.NODE_ENV;function createWindow() {Menu.setApplicationMenu(null);// 创建浏览器窗口const mainWindow = new BrowserWindow({show: false,minWidth: 1440,minHeight: 900,webPreferences: {partition: String(+new Date()),preload: path.join(__dirname, "preload.js"),},});mainWindow.maximize();mainWindow.show();// 如果是开发环境就把当前运行的web端口做成客户端预览// 如果是生产环境就把打包后的index做成客户端预览mainWindow.loadURL(NODE_ENV === "development"? "http://localhost:8090": `file://${path.join(__dirname, "../dist/index.html")}`);
}// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {createWindow();app.on("activate", function () {// 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他// 打开的窗口,那么程序会重新创建一个窗口。if (BrowserWindow.getAllWindows().length === 0) createWindow();});
});// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此,通常对程序和它们在
// 任务栏上的图标来说,应当保持活跃状态,直到用户使用 Cmd + Q 退出。
app.on("window-all-closed", function () {if (process.platform !== "darwin") app.quit();
});
// pc客户端preload.js(渲染进程)
window.addEventListener('DOMContentLoaded', () => {const replaceText = (selector, text) => {const element = document.getElementById(selector)if (element) element.innerText = text}for (const dependency of ['chrome', 'node', 'electron']) {replaceText(`${dependency}-version`, process.versions[dependency])}
})

在vite.config.js中添加配置项

publicPath: './', // 防止electron打包后 页面空白
transpileDependencies: true, // 防止electron打包后 页面空白

如图所示:
CSDN_img2

在package.json中添加配置项

{"main": "electron/main.js", // 刚刚创建的main.js文件的路径"scripts": {"electron": "wait-on tcp:8090 && cross-env NODE_ENV=development electron .","electron:build": "vite build --mode production && electron-builder"},// 以下是electron-builder的配置"build": {"appId": "com.test", // 应用程序的唯一标识符"productName": "electron打包测试", // 应用程序的名称"copyright": "Copyright © 2023", // 版权信息// macOS配置"mac": {"category": "public.app-category.utilities", // App Store 分类"icon": "public/icons/icon.icns" // macOS 应用图标文件},"win": {}, // windows配置 可以添加windows特定配置// 安装程序配置"nsis": {"oneClick": false, // 是否一键安装(无安装界面)"allowToChangeInstallationDirectory": true // 是否允许用户选择安装目录},// 包含文件"files": ["dist/**/*", // 包含dist目录下的所有文件(Vite构建输出)"electron/**/*" // 包含electron目录下的所有文件(主进程渲染进程代码)],// 目录配置"directories": {"buildResources": "assets", // 构建资源目录(图标 证书等)"output": "dist_electron" // 构建输出目录}}
}

如图所示:
CSDN_img3

运行命令 npm run electron:build 打包

为了使项目和electron正常运行,需要先运行项目,使得其开发服务器的url可以正常访问,然后再开启electron去加载url。
打包成功后,会在根目录出现一个 dist_electron 文件夹,文件夹下会有一个 .exe 应用程序

关于mac,win和nsis配置 完整说明

"mac": {}
常用配置:
category: 应用分类"public.app-category.utilities" - 工具类"public.app-category.productivity" - 生产力工具"public.app-category.developer-tools" - 开发工具"public.app-category.graphics-design" - 图形设计"public.app-category.photography" - 摄影"public.app-category.music" - 音乐"public.app-category.video" - 视频"public.app-category.games" - 游戏"public.app-category.education" - 教育"public.app-category.business" - 商务"public.app-category.finance" - 财务"public.app-category.medical" - 医疗"public.app-category.news" - 新闻"public.app-category.social-networking" - 社交网络"public.app-category.reference" - 参考工具"public.app-category.sports" - 体育"public.app-category.travel" - 旅行"public.app-category.weather" - 天气
icon: 应用图标文件(.icns 文件路径)
target: 构建目标格式"dmg" - 磁盘镜像文件(推荐)"zip" - 压缩包格式"pkg" - 安装包格式"mas" - Mac App Store 发布版"mas-dev" - Mac App Store 开发版"dir" - 目录格式(用于测试)
identity: 代码签名身份null - 不进行代码签名"Developer ID Application: 你的名字 (TEAM_ID)" - 开发者证书"3rd Party Mac Developer Application: 第三方证书" - 第三方开发者证书完整的 macOS 配置示例:
"mac": {"category": "public.app-category.utilities","icon": "build/icon.icns","target": [{"target": "dmg","arch": ["x64", "arm64"]},{"target": "zip","arch": ["x64", "arm64"]}],"identity": null,"gatekeeperAssess": false,"hardenedRuntime": false,"artifactName": "${productName}-${version}-${arch}.${ext}","minimumSystemVersion": "10.14.0","darkModeSupport": true,"extendInfo": {"CFBundleURLTypes": [{"CFBundleURLName": "com.example.app","CFBundleURLSchemes": ["myapp"]}]}
}
"win": {} 
常用配置:
icon: windows应用图标(.ico文件 路径)
target: 构建目标格式'nsis' - 安装程序(.exe)'portable' - 便携版(无需安装)'appx' - Windows Store应用包'zip' - 压缩包格式'7z' - 7-Zip压缩包'tar.xz' - Tar.XZ压缩包
requestedExecutionLevel: 执行权限级别'asInvoker' - 以调用者权限运行(默认)'requireAdministrator' - 需要管理员权限'highestAvailable' - 使用最高可用权限
forceCodeSigning: 是否强制代码签名true - 强制代码签名,无证书则会失败false - 不强制,允许未签名的应用
signAndEditExecutable: 是否签名可执行文件true - 对可执行文件进行数字签名false - 不对可执行文件进行签名完整的 Windows 配置示例:
"win": {"icon": "build/icon.ico","target": [{"target": "nsis","arch": ["x64"]},{"target": "portable","arch": ["x64"]}],"requestedExecutionLevel": "asInvoker","forceCodeSigning": false,"signAndEditExecutable": false,"artifactName": "${productName}-${version}-${arch}.${ext}","publisherName": "我的公司","verifyUpdateCodeSignature": false
}
"nsis": {} 
常用配置:
installerIcon: 安装程序图标(.ico文件 路径)
uninstallerIcon: 卸载程序图标(.ico文件 路径)
createDesktopShortcut: 是否创建桌面快捷方式true - 为所有用户创建false - 不创建'always' - 总是创建'perUser' - 仅为当前用户创建
createStartMenuShortcut: 是否创建开始菜单快捷方式true - 为所有用户创建false - 不创建'always' - 总是创建'perUser' - 仅为当前用户创建完整的 NSIS 配置示例:
"nsis": {"oneClick": false,"allowToChangeInstallationDirectory": true,"installerIcon": "build/installer.ico","uninstallerIcon": "build/uninstaller.ico","createDesktopShortcut": true,"createStartMenuShortcut": true,"shortcutName": "我的应用",              // 快捷方式名称"include": "build/installer.nsh",       // 自定义 NSIS 脚本"script": "build/installer.nsh",        // 自定义安装脚本"artifactName": "${productName}-${version}-Setup.${ext}", // 安装包文件名"deleteAppDataOnUninstall": false,      // 卸载时是否删除应用数据"runAfterFinish": true,                 // 安装完成后是否运行应用"menuCategory": false,                  // 是否在开始菜单中创建分类"allowElevation": true,                 // 是否允许提升权限"requestExecutionLevel": "asInvoker"    // 执行权限级别
}

打包成功后的输出的文件目录,及安装界面展示

CSDN_img4

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

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

相关文章

基于安全抽象模型(SAM)的汽车网络安全防御与攻击分析

摘要自动驾驶汽车比以往任何一种个人出行交通工具都具有更大的受攻击可能性。这主要是因为这类汽车对通信有极高的需求,一方面是出于功能和安全方面的考虑,另一方面则是为了满足舒适性需求。无人驾驶汽车需要与周围环境进行通信的接口、直接连接&#xf…

线扫相机不出图原因总结

1、帧触发信号有问题 线扫相机出图由帧信号决定开始采集,如果没有帧信号线扫相机无法识别开始信号,所以不出图 1)没有给相机帧信号 帧信号是一个短暂的脉冲信号,持续时间不要太长,相机能识别就可以,一般由plc或者控制卡的数字量输出口触发,可以通过监测数字量输出口来确…

开发避坑指南(46):Java Stream 对List的BigDecimal字段进行求和

需求 对int,long类型的数据求和直接用stream().mapToInt()、stream().mapToDouble(),可是没有stream().mapToBigDecimal()这样的方法,那么如何用stream对List的BigDecimal字段进行求和? 代码实现 直接上代码 public class OrderIn…

pycharm如何处理python项目间引用

1. 如何在pycharm中将其它项目添加到打开的项目中 如图所示:文件->打开->附加(Attach)即可2.如何引用:直接作为一个普通package引用即可 from attack_projectxxx.modulexxx import xxx3.pyinstaller如何编译这种引用其它项目的可执行文…

家庭劳务机器人发展阶段与时间预测

家庭劳务机器人大规模进入家庭不会是一个单一的时间点,而是一个分阶段、渐进式的过程。我们可以将这个进程分为以下几个阶段,并对每个阶段的时间线进行预测:第一阶段:单一功能机器人普及(现在 - 2025年)这个…

Zynq开发实践(FPGA之spi实现)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】虽然串口用的地方比较多,实现起来也比较简单。但是串口本身速度比较慢,不利于高速数据通信。而且单个串口没有办法和很多芯片…

指甲打磨机/磨甲器MCU控制方案开发,轻松解决磨甲问题

美甲打磨机/指甲打磨机核心功能需求 1. 基础功能 无级调速(5,000-30,000 RPM,PWM控制) 正反转切换(可选,用于抛光/去角质) 按键锁/防误触(长按3秒解锁) 锂电池管理(3.7V单节,带充电指…

临床数据挖掘与分析:利用GPU加速Pandas和Scikit-learn处理大规模数据集

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,注册即送-H卡级别算力,80G大显存,按量计费,灵活弹性,顶级配置,学生更享专属优惠。 摘要 随着电子健康记录(EHR)的普…

二进制安装MySQL 8.0指南:跨平台、自定义数据路径、安全远程访问配置

二进制安装 MySQL 8.0 在生产或测试环境中,我们常常希望避免包管理器带来的依赖和交互问题,尤其是当系统自带版本过旧或安装过程频繁弹窗时。此时,使用 MySQL 官方提供的二进制压缩包(Generic Linux Binary) 进行安装…

Z检验与T检验的区别与联系:原理、公式和案例全解

Z检验与T检验全解析:原理、区别与实际案例 统计学的核心任务之一,就是通过有限的样本数据去推断总体特征。在这一过程中,假设检验成为了最常见的工具。而在众多检验方法中,Z检验与T检验几乎是入门必学,也是应用最广泛的…

SpringBoot之缓存(最详细)

文章目录项目准备新建项目并选择模块安装添加依赖添加application.yml删除demos.web包编写pojo层userdto/ResultJson编写mapper层UserMapper编写service层UserService编写controller层编写配置类MybatisPlusConfig编写测试类1 缓存分类1.1 MyBatis一级缓存1.2 MyBatis二级缓存1…

B站 韩顺平 笔记 (Day 29)

目录 1(集合的框架体系) 2(Collection接口和常用方法) 2.1(Collection接口实现类特点) 2.2(常用方法) 2.3(遍历元素方式1:迭代器) 1&#x…

axios报错解决:unsupported BodyInit type

目录 问题 原因 解决方法 问题 Got ‘unsupported BodyInit type’ bug on iPhone 14(IOS 17.5) Issue #6444 axios/axios 我这里是iPhone 6plus打开会报错白屏 好多人遇到了相同的问题 当我在 iPhone 14 上浏览页面时,我收到一条错误消息:错误:不支持的 BodyInit 类型,…

iperf3网络性能测试工具

iperf3 是一个功能非常强大的网络性能测试工具,用于测量两个网络节点之间的最大TCP、UDP带宽和性能。它通过创建数据流并测量其吞吐量来工作。 下面我将为您详细介绍其核心用法、常用命令和参数。 核心概念:客户端/服务器模式 iperf3 测试需要两台机器:一台作为服务器端(…

【C#】 资源共享和实例管理:静态类,Lazy<T>单例模式,IOC容器Singleton我们该如何选

文章目录前言一、静态类1.1 静态类的特点1.2 静态类的使用1.3 静态类的缺点二、单例模式2.1 Lazy延迟初始化2.2 Lazy< T>单例模式的使用2.3 单例模式的特点三、IOC的Singleton总结前言 编写程序的时候&#xff0c;常常能碰到当某些数据或方法需要被整个程序共享&#xf…

MySQL——存储引擎、索引

一、存储引擎1.MySQL体系结构2.存储引擎简介存储引擎就是储存数据、建立索引、更新/查询数据等技术的实现方式。储存引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可被称为表类型建表语句&#xff1a;查询数据库支持的储存引擎&#xff1a;show engines…

机器学习01——机器学习概述

上一章&#xff1a;机器学习核心知识点目录 下一章&#xff1a;机器学习02——模型评估与选择 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、参考书推荐二、机器学习的基本概…

Shell编程:检测主机ip所在网段内其他在线ip

一、逻辑设计获取本机 ip 及 网段循环检测网段内所有 ip判断 ping 结果&#xff0c;符合条件的输出相关信息二、代码展示#!/bin/bash#获取本机ip local_iphostname -I #local_ipip addr| grep "inet "|grep -v 127.0.0.1| awk {print $2}#获取本机网段 networkecho $…

Windows安装Chroma DB

安装步骤 安装python 3.8或以上的版本创建虚拟环境&#xff1a;python -m venv chroma_env激活虚拟环境&#xff1a;.\chroma_env\Scripts\activate安装Chroma DB&#xff1a;pip install chromadb(可选)安装扩展功能&#xff1a;pip install sentence-transformers pypdf tikt…

李彦宏亲自说

昨天&#xff0c;李彦宏亲自说&#xff1a;百度的数字人直播以假乱真&#xff0c;很多人是看不出这是数字人&#xff0c;而且转化率很高”这几个月百度一直在推“数字人”不再强调“大模型”了。数字人是AI落地最适合企业的一款产品&#xff0c;一般用于客服、面试、直播带货等…