vite+vue 项目使用 electron

创建 vite+vue 项目

复制代码
npm create vite

Electron 官方文档

electron 安装

安装 electron

复制代码
npm install --save-dev electron

新建 electron 的入口文件,我这里在根目录新建 electron 文件夹,然后新建main.jspreload.js文件

根据官网说明,将以下代码写入 main.js

复制代码
const { app, BrowserWindow } = require('electron')
const path = require('path')

function createWindow () {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })
  // 这里需要修改一下,因为官网是直接初始化electron项目,内容是直接在根目录建了个 index.html,比较简单
  // win.loadFile('index.html')
  // 这里使用 vite+vue 按官网写启动项目后页面是空的,如果按打包后的目录来写就是下面这样
  // win.loadFile('dist/index.html')
  // 如果是在开发时,就可以改成加载启动项目后的url,例如vite默认启动是5173端口
  win.loadURL("http://localhost:5173/")
}

app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

根据官网说明,将以下代码写入 preload.js

复制代码
window.addEventListener('DOMContentLoaded', () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
  }

  for (const type of ['chrome', 'node', 'electron']) {
    replaceText(`${type}-version`, process.versions[type])
  }
})

配置

因为 electron 使用的是 commonjs 的语法,所以 type 为 module 时,无法启动项目

第一种,不使用其他插件

修改 package.json 文件,增加 electron 入口文件路径和运行命令,修改 type 值为 commonjs

复制代码
"type":"commonjs",
"main":"electron入口文件路径",

"scripts":{
  "start":"electron .",
}

然后开启终端,使用npm run dev启动项目,这个访问 URL 就是 main.js 里 win.loadURL 写的内容

然后再开启一个终端,使用npm start启动 electron 窗口

启动的窗口可以不用关,内容是随着 vite 的热加载改变而改变的

第二种,使用 vite-plugin-electron

安装 vite-plugin-electron

复制代码
npm install vite-plugin-electron -D

修改 package.json 文件,增加 electron 入口文件路径,修改 type 值为 commonjs

复制代码
"type":"commonjs",
"main":"electron入口文件路径",

修改 vite.config.js 文件,引入 vite-plugin-electron 插件并使用

复制代码
import electron from "vite-plugin-electron";

plugins: [
  vue(),
  electron({
    entry: "electron 入口文件路径",
  }),
],

然后直接使用npm run dev启动项目即可

打包

electron-builder 官方文档

安装 electron-builder,用于打包

复制代码
npm install electron-builder -D

最基本配置

添加 package.json 打包配置

最基本的配置就是仅添加输出目录,然后修改 build 命令,使 vite 将项目文件打包到 dist 文件夹后,再使用 electron-builder 进行打包

记得打包前要将 electron 入口文件内的加载代码改为win.loadFile('dist/index.html')

其他打包配置

在 package.json 里还可以加描述及作者

复制代码
"description": "这是一个不负责任的描述",
"author": "作者",

其他的打包配置详情可以看官方配置文档

除了在 package.json 里的 build 里写打包配置,也可以另外新建electron-builder.ymlelectron-builder.jsonelectron-builder.json5配置文件

我这里使用的electron-builder.yml,因为可以写注释还有高亮

下面是 win 打包基本配置,详细的太多了看得眼花,可以自行查看官网

复制代码
{
  "appId": "com.electron.desktop", # appid
  "productName": "filename", # 为可执行文件指定名称,默认为 package.json 的 name
  "copyright": "Copyright © year sywdebug", # 版权信息
  "directories": {
      "output": "release", # 输出路径
    },
  "mac": {},
  "win": {
      "target": "nsis", # 目标包类型:nsis 列表,nsis-webWeb 安装程序,portable 无需安装的便携式应用程序
      "icon": "dist/myIcon.ico", # 应用程序图标的路径,尺寸至少256*256
      "legalTrademarks": "", # 商标和注册商标
    },
  "nsis": {
      "oneClick": true, # 是否创建一键安装程序或辅助
      "perMachine": false, # 是否总是针对所有用户(每台机器)进行安装
      "allowToChangeInstallationDirectory": true, # 是否允许用户更改安装目录
      "removeDefaultUninstallWelcomePage": false, # 删除默认的卸载欢迎页面
    },
  "linux": {},
}
相关推荐
JoyGqz14 小时前
Vue 2 EOL 之后还在跑生产?这个开源安全分支已修主流 CVE,一行依赖即可接入
vue.js
Lkstar14 小时前
Vue 3 Composition API 进阶:自定义 Hooks 与 provide/inject 的高级玩法
vue.js·面试
前端若水15 小时前
在 Vue 2 与 Vue 3 中使用 markdown-it-vue 渲染 Markdown 和数学公式
前端·javascript·vue.js
Aolith15 小时前
用 Vue 递归组件实现嵌套回复,我的评论系统升级全记录
vue.js·全栈
叫我少年16 小时前
Vue3 状态管理 Pinia 入门指南
vue.js
yqcoder18 小时前
Vue 的心脏:深度解析 Vue 2 vs Vue 3 响应式机制
前端·javascript·vue.js
wand codemonkey18 小时前
【第五步+前后分离调】最后的联动调试--java+Vue3项目
java·开发语言·vue.js
还好还好不是吗19 小时前
用 DeepSeek-TUI 接入 MatrixMedia MCP,终端里 AI 对话驱动多平台自动发布
electron·开源
骑自行车的码农19 小时前
react hooks原理:为什么不能在条件中使用 hook ?
vue.js·react.js
Aolith19 小时前
从一堆 Bug 到一行代码:我是如何用 keep-alive 优雅解决 Vue 滚动位置恢复的
vue.js·全栈