提示:此项目包含了 electron vite ts elementplus 等内容,仅用作个人笔记
前言
确保电脑安装了node.js和npm 的环境,electron是依赖于node.js环境的,nodejs捆绑了npm,下载了nodejs,就可以进行项目构建。
提示:构建之前先检查一下环境是否安装成功,进入终端分别输入:
node -v
npm -v
一、创建步骤
npm init vite //初始化vite项目
Project name: » vite-project//输入项目名称
选择框架vue
Select a framework: » - Use arrow-keys. Return to submit.//
> Vanilla
Vue
React
Preact
Lit
Svelte
Others
选择语言TypeScript
Select a language: » - Use arrow-keys. Return to submit.
> TypeScript
JavaScript
构建成功,再继续执行一下:
Done. Now run:
cd vite-project
npm install
npm run dev
到这里已经构建成功了vite项目,但是还没有加入electron框架
进入项目目录
npm install electron -D //给项目添加electron支持
npm install vite-plugin-electron -D //使用这个插件可以让vue服务和electron同时启动
npm install element-plus //添加 element-plus支持
npm install vue-router//使用路由
npm install electron-builder -D//electron程序打包,后面用的到
npm install pinia//状态管理插件
此时一个electron+vue3+elementplus的项目构建完成了,再进行一些配置,让程序跑起来。
项目配置
编写 Electron 入口文件,创建 electron/main.ts,与 src 目录同级,ts文件。内容如下:
// 控制应用生命周期和创建原生浏览器窗口的模组
const { app, BrowserWindow } = require('electron')
const path = require('path')
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = true; // 关闭控制台的警告
function createWindow () {
// 创建浏览器窗口
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
frame:false,//可选,设置无边框,但是不能拖动窗口
transparent:true,//可选,设置透明窗口
backgrountColor:'#00000000',//设置背景色为透明色
resizable:false,//关闭可调节窗口大小
webPreferences: {
// 书写渲染进程中的配置
nodeIntegration: true, //开启true这一步很重要,目的是为了vue文件中可以引入node和electron相关的API
contextIsolation: false, // 可以使用require方法
enableRemoteModule: true, // 可以使用remote方法
}
})
// 加载 index.html
// mainWindow.loadFile('./index.html') // 新增
mainWindow.loadURL('http://localhost:5173')//根据vue url更改
// 打开开发工具
mainWindow.webContents.openDevTools()
}
// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
// 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他
// 打开的窗口,那么程序会重新创建一个窗口。
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此,通常对程序和它们在
// 任务栏上的图标来说,应当保持活跃状态,直到用户使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
// 控制应用生命周期和创建原生浏览器窗口的模组
const { app, BrowserWindow } = require('electron')
const path = require('path')
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = true; // 关闭控制台的警告
function createWindow () {
// 创建浏览器窗口
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
// 书写渲染进程中的配置
nodeIntegration: true, //开启true这一步很重要,目的是为了vue文件中可以引入node和electron相关的API
contextIsolation: false, // 可以使用require方法
enableRemoteModule: true, // 可以使用remote方法
}
})
// 加载 index.html
// mainWindow.loadFile('./index.html') // 新增
mainWindow.loadURL('http://localhost:5173')
// 打开开发工具
mainWindow.webContents.openDevTools()
}
// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
// 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他 // 打开的窗口,那么程序会重新创建一个窗口。
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此,通常对程序和它们在
// 任务栏上的图标来说,应当保持活跃状态,直到用户使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
在 vite.config.ts 中,配置 Electron 入口文件(注意:vite-plugin-electron 版本不同,electron 配置可能不一样)
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import electron from 'vite-plugin-electron'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
electron({
entry: './main.ts',//根据自己的入口文件路径,每个人可能不一样
}),
],
})
在 package.json 中,增加 main 字段,去掉 type 字段
🚨 默认情况下, main.ts文件将会被构建到 dist-electron(注意:vite-plugin-electron 版本不同,构建的文件夹也可能不同)
🚨 目前, Electron 尚未支持 “type”: “module”,需要去掉 type 字段
"main": "dist-electron/main.js",//声明入门文件
npm run dev //启动程序