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

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

用 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

推荐文章

手机导航效果
2024-11-19 07:53:16 +0800 CST
JavaScript数组 splice
2024-11-18 20:46:19 +0800 CST
使用Python实现邮件自动化
2024-11-18 20:18:14 +0800 CST
windows安装sphinx3.0.3(中文检索)
2024-11-17 05:23:31 +0800 CST
Java环境中使用Elasticsearch
2024-11-18 22:46:32 +0800 CST
Vue3中的Slots有哪些变化?
2024-11-18 16:34:49 +0800 CST
Vue3 组件间通信的多种方式
2024-11-19 02:57:47 +0800 CST
Redis和Memcached有什么区别?
2024-11-18 17:57:13 +0800 CST
什么是Vue实例(Vue Instance)?
2024-11-19 06:04:20 +0800 CST
乐观锁和悲观锁,如何区分?
2024-11-19 09:36:53 +0800 CST
Golang在整洁架构中优雅使用事务
2024-11-18 19:26:04 +0800 CST
Vue 3 中的 Fragments 是什么?
2024-11-17 17:05:46 +0800 CST
Elasticsearch 的索引操作
2024-11-19 03:41:41 +0800 CST
Vue3中如何实现状态管理?
2024-11-19 09:40:30 +0800 CST
CSS 媒体查询
2024-11-18 13:42:46 +0800 CST
程序员茄子在线接单