创建 Vue3 Electron Vite ElectronBuilder 客户端项目

创建 vue vite 项目

1
2
3
4
# 初始化项目
npm init vue@latest
cd {preject_name}
yarn install
1
2
3
4
# 添加 electron 依赖
yarn add electron --dev
# 添加 vite electron 插件依赖
yarn add vite-plugin-electron --dev

在项目中创建 electron 文件夹

1
mkdir electron

electron-.png

进入 electron 文件夹,创建 main.js 和 preload.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
cd electron
vi main.js

const { app, BrowserWindow } = require('electron');
const path = require('path')

const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
},
});
win.maximize();
// You can use `process.env.VITE_DEV_SERVER_URL` when the vite command is called `serve`
if (process.env.VITE_DEV_SERVER_URL) {
win.loadURL(process.env.VITE_DEV_SERVER_URL)
} else {
// Load your file
win.loadFile('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();
}
});
1
2
3
4
5
6
7
8
9
10
11
vi preload.js

const { contextBridge } = require('electron')

contextBridge.exposeInMainWorld('versions', {
node: () => process.versions.node,
chrome: () => process.versions.chrome,
electron: () => process.versions.electron,
// 能暴露的不仅仅是函数,我们还可以暴露变量
})

返回项目根目录,修改 vite.config.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cd ..
vi vite.config.js

import {fileURLToPath, URL} from 'node:url'

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

// https://vitejs.dev/config/
export default defineConfig({
plugins: [
electron([
{
entry: 'electron/main.js',
},
{
entry: 'electron/preload.js',
onstart(options) {
//当预加载脚本构建完成时 通知渲染器进程重新加载页面
//而不是重新启动整个Electron App
options.reload()
},
}
]),
vue()
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})

修改 package.json

修改 main 属性为 dist-electron/main.js

nane-electron-vue3-vite-template..png```shell

添加 electron-builder

1
yarn add electron-builder --dev

创建 electron-builder.json5 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
vi electron-builder.json5

{
"appId": "YourAppID",
"asar": false,
"directories": {
"output": "release/${version}"
},
"files": [
"dist",
"dist-electron"
],
"mac": {
"artifactName": "${productName}_${version}.${ext}",
"target": [
"dmg"
]
},
"win": {
"target": [
{
"target": "nsis",
"arch": [
"x64"
]
}
],
"artifactName": "${productName}_${version}.${ext}"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"deleteAppDataOnUninstall": false
}
}

修改路由模式

1
2
3
4
vi src/router/router.js

// history: createWebHistory(import.meta.env.BASE_URL),
history: createWebHashHistory(import.meta.env.BASE_URL),

创建 Vue3 Electron Vite ElectronBuilder 客户端项目

https://blog.gnerv.com/2023/05/29/electron/Vue3-Electron-Vite-ElectronBuilder/

作者

Gnerv - Li Gen

发布于

2023-05-29

更新于

2023-05-29

许可协议