1.所需包
"dependencies": {
"vue": "^3.2.8"
},
"devDependencies": {
"concurrently": "^7.3.0",
"cross-env": "^7.0.3",
"electron": "^20.0.3",
"electron-builder": "^23.3.3",
"rimraf": "^3.0.2",
"wait-on": "^6.0.1",
"@vitejs/plugin-vue": "^1.6.0",
"@vue/compiler-sfc": "^3.2.6",
"vite": "^2.5.2"
}
2.package.json script及electron打包配置
"main": "electron/main.js",
"scripts": {
"electron": "wait-on tcp:3000 && cross-env NODE_ENV=development electron .",
"electron:serve": "concurrently -k \"npm run dev\" \"npm run electron\"",
"electron:build": "rimraf dist && npm run build && electron-builder",
"dev": "vite",
"build": "vite build",
"serve": "vite preview"
},
"build": {
"productName": "LookLock",
"copyright": "Copyright © 2022 yeyunlong",
"mac": {
"category": "public.app-category.utilities"
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true
},
"win": {
"icon": "./favicon.ico"
},
"files": [
"dist/**/*",
"electron/**/*"
],
"directories": {
"buildResources": "assets",
"output": "dist"
}
},
3.electron主进程配置main.js
const {
app,
screen,
BrowserWindow
} = require('electron')
const path = require("path");
const NODE_ENV = process.env.NODE_ENV;
let win;
function createWindow() {
win = new BrowserWindow({
width: screen.getPrimaryDisplay().workAreaSize.width,
height: screen.getPrimaryDisplay().workAreaSize.height,
icon: path.resolve(__dirname, "favicon.ico"),
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
win.loadURL(
NODE_ENV === "development" ?
"http://localhost:3000" :
`file://${path.join(__dirname, "../dist/index.html")}`
);
if (NODE_ENV === "development") {
win.webContents.openDevTools();
}
}
app.whenReady().then(() => {
createWindow()
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
4.preload.js预加载程序(略)
5.vite.config.js base路径配置 (解决打包后首页展示白页)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
base: "./",
})