编程 用 Electron + Vite + Vue3 搭建桌面端项目:Electron 基础配置

2024-11-19 08:49:45 +0800 CST views 1352

用 Electron + Vite + Vue3 搭建桌面端项目:Electron 基础配置(一)

点击关注公众号,“技术干货”及时达!

Electron 是基于 Chromium 和 Node.js 实现的,前端程序员可以使用 JavaScript、HTML 和 CSS 知识快速构建跨平台的桌面应用。不需要本地开发原生的经验,即可在 Windows、macOS 和 Linux 平台上运行应用。

笔者最近在学习 Electron 并且用它工作,积累了一些经验,并准备做一个桌面端工具,打包运行到 Windows、macOS 和 Linux 平台上。

创建项目

使用 Vue3 和 Vite 创建 Vue 项目并引入 Electron。

1. 创建 Vue 项目

npm create vite@latest electron-desktop-tool

2. 进入项目并运行

cd electron-desktop-tool
npm install
npm run dev

此时可以看到 Vue 项目已经启动,下一步我们将引入 Electron。

目录结构

在引入 Electron 之前,这是目前的目录结构。

安装 Electron

在安装 Electron 之前需要先配置一下安装源。在根目录下新建 .npmrc 文件,内容如下:

strict-ssl=false
registry=https://registry.npmmirror.com/
electron_mirror=https://registry.npmmirror.com/-/binary/electron/
electron_builder_binaries_mirror=https://registry.npmmirror.com/-/binary/electron-builder-binaries/

3. 安装 Electron 相关插件

npm install -D electron
npm install -D electron-builder
npm install -D electron-devtools-installer
npm install -D vite-plugin-electron

创建项目入口——主进程

新建一个 src-electron 文件夹,用来写 Electron 相关代码,并在它下面创建 main.js 文件,用于编写主进程代码。

// src-electron/main.js
const { app, BrowserWindow } = require('electron');
const { join } = require('path');

// 禁用安全警告
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

// 创建浏览器窗口
const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
  });

  if (process.env.VITE_DEV_SERVER_URL) {
    win.loadURL(process.env.VITE_DEV_SERVER_URL);
    win.webContents.openDevTools(); // 开启调试台
  } else {
    win.loadFile(join(__dirname, '../dist/index.html'));
  }
};

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

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

配置插件入口

vite.config.ts 中配置 vite-plugin-electron 插件入口:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import electron from 'vite-plugin-electron';

export default defineConfig({
  plugins: [
    vue(),
    electron({
      entry: './src-electron/main.js', // 主进程入口文件
    }),
  ],
  server: {
    port: 3000, // 开发服务器端口
  },
});

配置 package.json

package.json 中删除 "type": "module",并配置 main 字段为 Electron 主进程文件路径:

"main": "./src-electron/main.js",

启动 Electron 项目

运行以下命令启动项目:

npm run dev

可以看到弹出一个 Electron 窗口,表明一个基本的 Electron 应用已经搭建成功。

修改标题和图标

1. 修改标题

在主进程中创建窗口时可以自定义窗口标题:

const win = new BrowserWindow({
  width: 800,
  height: 600,
  title: '我的应用', // 自定义窗口标题
});

2. 修改图标

通过 icon 属性设置窗口和任务栏图标:

const { join } = require('path');
const win = new BrowserWindow({
  width: 800,
  height: 600,
  title: '我的应用',
  icon: join(__dirname, '../public/logo.ico'), // 自定义图标
});

打包

1. 配置打包命令

package.json 中添加打包命令和相关配置:

"scripts": {
  "electron:build": "vite build && electron-builder"
}

build 字段中配置打包信息:

"build": {
  "productName": "ElectronDeskTopTool",
  "appId": "dyy.dongyuanwai",
  "copyright": "dyy.dongyuanwai © 2024",
  "compression": "maximum",
  "asar": true,
  "directories": {
    "output": "release/"
  },
  "nsis": {
    "oneClick": false,
    "allowToChangeInstallationDirectory": true,
    "createDesktopShortcut": true,
    "createStartMenuShortcut": true,
    "shortcutName": "ElectronDeskTopTool"
  },
  "win": {
    "icon": "./public/logo.ico",
    "artifactName": "${productName}-v${version}-${platform}-setup.${ext}"
  },
  "mac": {
    "icon": "./public/logo.ico",
    "artifactName": "${productName}-v${version}-${platform}-setup.${ext}"
  },
  "linux": {
    "icon": "./public/logo.ico",
    "artifactName": "${productName}-v${version}-${platform}-setup.${ext}"
  }
}

2. 运行打包命令

npm run electron:build

可以看到生成了指定的打包文件输出目录,包含安装包文件。

复制全文 生成海报 桌面开发 前端技术 Electron Vite Vue

推荐文章

使用 sync.Pool 优化 Go 程序性能
2024-11-19 05:56:51 +0800 CST
nginx反向代理
2024-11-18 20:44:14 +0800 CST
404错误页面的HTML代码
2024-11-19 06:55:51 +0800 CST
Vue3中如何进行异步组件的加载?
2024-11-17 04:29:53 +0800 CST
jQuery中向DOM添加元素的多种方法
2024-11-18 23:19:46 +0800 CST
Go 协程上下文切换的代价
2024-11-19 09:32:28 +0800 CST
Vue3中如何进行性能优化?
2024-11-17 22:52:59 +0800 CST
Nginx 状态监控与日志分析
2024-11-19 09:36:18 +0800 CST
程序员出海搞钱工具库
2024-11-18 22:16:19 +0800 CST
Vue3中哪些API被废弃了?
2024-11-17 04:17:22 +0800 CST
内网穿透技术详解与工具对比
2025-04-01 22:12:02 +0800 CST
Vue 3 是如何实现更好的性能的?
2024-11-19 09:06:25 +0800 CST
地图标注管理系统
2024-11-19 09:14:52 +0800 CST
Shell 里给变量赋值为多行文本
2024-11-18 20:25:45 +0800 CST
黑客帝国代码雨效果
2024-11-19 01:49:31 +0800 CST
浏览器自动播放策略
2024-11-19 08:54:41 +0800 CST
在JavaScript中实现队列
2024-11-19 01:38:36 +0800 CST
thinkphp分页扩展
2024-11-18 10:18:09 +0800 CST
解决python “No module named pip”
2024-11-18 11:49:18 +0800 CST
Python 微软邮箱 OAuth2 认证 Demo
2024-11-20 15:42:09 +0800 CST
前端项目中图片的使用规范
2024-11-19 09:30:04 +0800 CST
使用Python提取图片中的GPS信息
2024-11-18 13:46:22 +0800 CST
淘宝npm镜像使用方法
2024-11-18 23:50:48 +0800 CST
程序员茄子在线接单