Vue项目使用electron打包桌面应用方式
作者:Z兽兽
本文详细介绍了如何使用Vue3和Electron创建一个桌面应用程序,并提供了一个完整的步骤指南,包括项目初始化、配置、安装依赖、主进程和渲染进程的设置、打包配置以及解决常见问题的方法
1. Vue项目初始化与配置
创建一个Vue3项目,运行项目
环境依赖:node.js(我的是v18.18.1版本)、npm
2. 修改 .npmrc 文件
.npmrc 文件路径:C:\Users\xxx\
文件最后加:
electron_mirror=https://npmmirror.com/mirrors/electron/ electron-builder-binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
3. 项目中安装electron包
npm install -d electron
或指定版本,我用的是28.0.0
npm install -d electron@28.0.0
如果用npm下载一直失败,可尝试用cnpm下载
//国内镜像源安装 cnpm npm install -g cnpm --registry=https://registry.npmmirror.com //cnpm安装electron cnpm install -d electron
4. electron的基本配置(主进程和渲染进程)
在项目根目录新建一个electron文件夹,存放两个文件:main.js(主进程)、preload.js(渲染进程)
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"),
nodeIntegration: true,
contextIsolation: false
},
});
mainWindow.maximize();
mainWindow.show();
// 如果是开发环境就把当前运行的web端口做成客户端预览
// 如果是生产环境就把打包后的index做成客户端预览
mainWindow.loadURL(
NODE_ENV === "development"
? "http://localhost:8089"
: `file://${path.join(__dirname, "../dist/index.html")}`
);
if (NODE_ENV === "development") {
mainWindow.webContents.openDevTools(); // 打开开发者工具
}
}
// 这段程序将会在 Electron 结束初始化和创建浏览器窗口的时候调用,部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
createWindow();
app.on("activate", function () {
// 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他打开的窗口,那么程序会重新创建一个窗口。
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。
app.on("window-all-closed", function () {
if (process.platform !== "darwin") app.quit();
});
preload.js
//使用JavaScript在Electron环境中动态替换HTML元素文本,显示Chrome、Node.js和Electron的版本信息:
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])
}
})
该代码会在DOM加载完成后自动执行版本信息替换,确保操作DOM时元素已存在。
process.versions是Electron提供的环境信息对象,包含各组件版本号。
5. 在package.json配置electron入口文件
- 删除:
"type": "module"
- 添加:
"main": "electron/main.js"
6. 使用electron-builder打包
6.1 安装electron-builder
npm install -d electron-builder
或指定版本,我用的是26.0.12
npm install -d electron-builder@26.0.12
同样,如果npm下载失败,改用 cnpm
cnpm install -d electron-builder
6.2 在 package.json 中修改配置
添加author、description、build字段,并在scripts中添加打包命令 electron:build
{
"description": "app",
"author": {
"name": "xxx",
"email": "xxx@qq.com.cn"
},
"scripts": {
"electron:build": "vite build && electron-builder",
},
"build": {
"appId": "xxx.app",
"productName": "应用名称",
"copyright": "Copyright © 2023",
"directories": {
"output": "dist_electron" //打包后的文件夹
},
"win": {
"icon": "/build/icons/icon.ico" //应用图标,有需要就加,根目录下build文件夹
},
"mac": {
"icon": "/build/icons/icon.icns"
},
"linux": {
"icon": "/build/icons/icon.png"
},
"dmg": {
"contents": [
{
"x": 410,
"y": 150,
"type": "link",
"path": "/Applications"
},
{
"x": 130,
"y": 150,
"type": "file"
}
]
},
"files": [
"./dist",
"./electron",
"!**/node_modules/**"
],
"asar": false,
"nsis": {
"oneClick": false,
"allowElevation": true,
"allowToChangeInstallationDirectory": true,
"createDesktopShortcut": true,
"createStartMenuShortcut": true
}
}
}
注意:icon需要256*256的格式图片。且不同操作系统的icon类型不一样
6.3 若系统白屏
在 vite.config.ts 中添加 base 字段
base: "./"
7. 完成,执行打包命令
npm run electron:build

打包后的文件,win-unpacked 中有免安装的可以直接打开看

8. 在打包过程中,还可能会失败,这时候就需要下载几个安装包了
我当时下载的网址找不到了,附上我的压缩包,在文章顶部绑定的资源里
8.1 nsis

8.2 winCodeSign

这几个包的作用就是:把我们的应用打包成一个可以安装、卸载、自动创建桌面图标的.exe安装包
总结
至此,所有步骤完成,我们就可以自己创建桌面应用程序了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
