Vue项目使用electron打包桌面应用方式

 更新时间:2025年12月03日 14:12:42   作者: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安装包

总结

至此,所有步骤完成,我们就可以自己创建桌面应用程序了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue 如何使用props、emit实现自定义双向绑定的实现

    Vue 如何使用props、emit实现自定义双向绑定的实现

    这篇文章主要介绍了Vue 如何使用props、emit实现自定义双向绑定的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • vue利用openlayers加载天地图和高德地图

    vue利用openlayers加载天地图和高德地图

    这篇文章主要介绍了 vue利用openlayers加载天地图和高德地图,下文章主要由两部分完成openlayers加载天地图和加载高德地图,下面来看看详细内容吧,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • 使用WebStorm运行vue项目的详细图文教程

    使用WebStorm运行vue项目的详细图文教程

    在WebStorm中怎么打开一个已有的项目,这个不用多说,那么如何运行一个vue项目呢?下面这篇文章主要给大家介绍了关于使用WebStorm运行vue项目的相关资料,需要的朋友可以参考下
    2023-02-02
  • vue超时计算的组件实例代码

    vue超时计算的组件实例代码

    这篇文章主要介绍了vue超时计算的组件实例代码,需要的朋友可以参考下
    2018-07-07
  • 如何为老vue项目添加vite支持详解

    如何为老vue项目添加vite支持详解

    Vite是一个开发环境工具,旨在提高我们的开发速度,下面这篇文章主要给大家介绍了关于如何为老vue项目添加vite支持的相关资料,需要的朋友可以参考下
    2021-09-09
  • vue定义私有过滤器和基本使用

    vue定义私有过滤器和基本使用

    这篇文章主要介绍的是 vue定义私有过滤器和基本使用,下面文章围绕vue定义私有过滤器的相关资料展开内容,需要的朋友可以参考一下,希望对大家有所帮助
    2021-11-11
  • Vue3源码分析调度器与watch用法原理

    Vue3源码分析调度器与watch用法原理

    这篇文章主要为大家介绍了Vue3源码分析调度器与watch用法原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Vue实现文件批量打包压缩下载

    Vue实现文件批量打包压缩下载

    这篇文章主要为大家详细介绍了如何利用Vue实现文件批量打包压缩下载功能,文中的实现步骤讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-07-07
  • 轻量级富文本编辑器wangEditor结合vue使用方法示例

    轻量级富文本编辑器wangEditor结合vue使用方法示例

    在我们项目中,有些时候需要使用富文本编辑器。本文将以百度开发的Ueditor结合Vue.js介绍一下。非常具有实用价值,需要的朋友可以参考下
    2018-10-10
  • vue cookie和本地存储的使用详解

    vue cookie和本地存储的使用详解

    在Vue中,可以使用多种方式来处理cookie和本地存储,不同的方法还有不同的特点和适用场景,本文主要介绍了这些方法的对比和使用场景,希望对大家有所帮助
    2023-08-08

最新评论