还有前端不知道Electron的?手把手教你把Vue项目打包成桌面程序
ztj100 2025-06-13 18:10 52 浏览 0 评论
今天遇到一个以前的前端同事 他突然微信问我winform 怎么写?
我当时一脸懵 问他你不是前端开发么怎么研究winform了?
他说公司要他做一个桌面程序,他说他不会,我说你干前端这么久了没听说过Electron么?
经过我一顿安利后,他总算打包成功了第一个版本,我就想在这也记录一下 Electron 怎么打包现有Vue项目吧
一、环境准备:先给电脑洗洗脚
# 安装Node.js(建议v16.20.2)
# 国内镜像配置(否则下载依赖要等到地老天荒)
npm config set registry https://registry.npmmirror.com
# 安装Electron(版本22.3.7)
npm install electron --save-dev
温馨提示:这一步要是卡成PPT,赶紧检查网络!建议直接下载Electron镜像包塞进缓存目录(路径:C:\Users\你的用户名\AppData\Local\electron\Cache)
二、Vue项目改造:给网页穿上盔甲
- 1. 打包静态文件
npm run build
- 这会生成dist文件夹,就像给你的Vue项目做了个全身SPA!
- 创建Electron的「说明书」main.js
const { app, BrowserWindow } = require('electron')
let win = null
function createWindow() {
win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true, // 允许Node.js混入
contextIsolation: false // 关闭安全隔离(开发阶段可开)
}
})
win.loadFile('dist/index.html') // 加载打包后的Vue
win.webContents.openDevTools() // 开发者工具随时待命
}
app.whenReady().then(createWindow)
这文件就像Electron的「大脑」,指挥着浏览器窗口怎么干活
- 修改package.json
{
"main": "main.js",
"scripts": {
"electron": "electron .",
"build": "vue-cli-service build"
}
}
重点:添加"electron": "electron .",以后只要npm run electron就能启动
三、打包实战:和Electron斗智斗勇
步骤1:启动内置服务器
npm install express --save-dev
新建server.js:
const express = require('express')
const app = express()
app.use(express.static('dist'))
app.listen(3000, () => console.log('Server running on port 3000'))
修改main.js加载本地服务器:
win.loadURL('http://localhost:3000')
步骤2:安装打包神器electron-builder
npm install electron-builder --save-dev
配置package.json:
{
"build": {
"appId": "com.yourcompany.app",
"productName": "我的神级应用",
"directories": {"output": "dist_electron"}
}
}
步骤3:执行打包命令
npm run build && electron-builder
常见翻车现场:
o 下载Electron失败:手动下载对应版本放到缓存目录(参考)
o 打包白屏:Vue路由模式要改成hash模式(参考)
o 缺少依赖包:手动下载winCodeSign等文件(参考)
四、进阶玩法:给应用加点料
自定义图标
在package.json添加:
"build": {
"win": {"icon": "public/icon.ico"}
}
打包成安装包
electron-builder --win --x64
生成dist_electron文件夹,里面就是安装包啦!
跨平台打包
# 打Mac包
electron-builder --mac
# 打Linux包
electron-builder --linux
五、血泪经验大放送
- 1. 版本兼容性
Electron和Node.js版本要像情侣一样般配,建议用nvm管理Node版本 - 2. 安全警告
生产环境务必设置contextIsolation: true,别学我瞎搞(参考) - 3. 内存泄漏
打包后内存占用飙升?试试--asar压缩(参考)
当你双击生成的.exe文件,看到自己写的Vue项目在桌面活蹦乱跳时——那种成就感,就像亲手造出了会动的乐高!
记住,每个报错都是编译器在和你玩捉迷藏,只要耐心排查,终能修成正果!
相关推荐
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统...
- systemd是什么如何使用_systemd/system
-
systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
-
Linux系统日常巡检脚本,巡检内容包含了,磁盘,...
- 7,MySQL管理员用户管理_mysql 管理员用户
-
一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
-
1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
-
设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...
- linux系统启动流程和服务管理,带你进去系统的世界
-
Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...
- CentOS7系统如何修改主机名_centos更改主机名称
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
-
为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...
- Kubernetes 高可用(HA)集群部署指南
-
Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...
- Linux项目开发,你必须了解Systemd服务!
-
1.Systemd简介...
- Linux系统systemd服务管理工具使用技巧
-
简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...
- Linux下NetworkManager和network的和平共处
-
简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
这一次,彻底搞懂Java并发包中的Atomic原子类
-
- 最近发表
-
- Linux集群自动化监控系统Zabbix集群搭建到实战
- systemd是什么如何使用_systemd/system
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
- 7,MySQL管理员用户管理_mysql 管理员用户
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
- linux系统启动流程和服务管理,带你进去系统的世界
- CentOS7系统如何修改主机名_centos更改主机名称
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)