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在使用ECharts时的异步更新和数据加载详解

    vue在使用ECharts时的异步更新和数据加载详解

    这篇文章主要给大家介绍了关于vue在使用ECharts时的异步更新和数据加载的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • vue中typescript装饰器的使用方法超实用教程

    vue中typescript装饰器的使用方法超实用教程

    这篇文章主要介绍了vue中使用typescript装饰器的使用方法超实用教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • VUE3中h()函数和createVNode()函数的使用解读

    VUE3中h()函数和createVNode()函数的使用解读

    这篇文章主要介绍了VUE3中h()函数和createVNode()函数的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue filter的几种用法示例小结

    vue filter的几种用法示例小结

    Vue.filter函数用于注册一个全局的过滤器,该过滤器可以在模板和组件中使用,这篇文章主要介绍了vue filter的几种用法示例小结,需要的朋友可以参考下
    2024-08-08
  • Vue.js自定义事件的表单输入组件方法

    Vue.js自定义事件的表单输入组件方法

    下面小编就为大家分享一篇Vue.js自定义事件的表单输入组件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue3项目vite.config.js配置代理、端口、打包名以及图片压缩

    vue3项目vite.config.js配置代理、端口、打包名以及图片压缩

    这篇文章主要给大家介绍了关于vue3项目vite.config.js配置代理、端口、打包名以及图片压缩的相关资料,因为3.0版本中vue已经内置了很多关于webpack的配置,一般情况下开箱即用,需要修改则可以在vue.config.js文件中完成,需要的朋友可以参考下
    2023-12-12
  • vue视频播放暂停代码

    vue视频播放暂停代码

    今天小编就为大家分享一篇vue视频播放暂停代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue-router 导航完成后获取数据的实现方法

    vue-router 导航完成后获取数据的实现方法

    这篇文章主要介绍了vue-router 导航完成后获取数据,通过使用生命周期的 created() 函数,在组件创建完成后调用该方法,本文结合实例代码给大家讲解的非常详细需要的朋友可以参考下
    2022-11-11
  • 详解Vue、element-ui、axios实现省市区三级联动

    详解Vue、element-ui、axios实现省市区三级联动

    这篇文章主要介绍了Vue、element-ui、axios实现省市区三级联动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Vue中的无限加载vue-infinite-loading的方法

    Vue中的无限加载vue-infinite-loading的方法

    本篇文章主要介绍了Vue中的无限加载vue-infinite-loading的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论