创建electron-vite项目

439 阅读2分钟

前提条件

  • node: >= 18
  • pnpm: >= 8.8.0

项目特点

  • 基于electron-vite
  • 整合vue3
  • 整合pinia
  • 整合vue-router
  • 整合tailwindcss
  • 整合element-plus
  • 整合sqlite3
  • 整合scss
  • 整合log4js
  • 支持vue3组件自动引入
  • 支持在渲染器目录使用别名
  • 整合inversify实现依赖注入

创建基本的electron-vite项目

使用cli工具创建项目

pnpm create @quick-start/electron

按照命令提示一步步的操作,最终形成如下类似的项目结构。

笔者项目创建成功后,项目中使用的electron-vite版本为: "electron-vite": "^2.0.0"

笔者项目创建成功后,项目中使用的electron版本为: "electron": "^28.2.0"

项目结构

electron-vite-app              
├─ build                       
│  ├─ entitlements.mac.plist   
│  ├─ icon.icns                
│  ├─ icon.ico                 
│  └─ icon.png                 
├─ resources                   # 公共静态资源目录(如:图片,json文件等)
│  └─ icon.png                 
├─ src                         
│  ├─ main                     # 主进程文件目录
│  │  └─ index.ts              
│  ├─ preload                  # 预加载脚本目录
│  │  ├─ index.d.ts            
│  │  └─ index.ts              
│  └─ renderer                 # 渲染器目录(vue项目文件目录)
│     ├─ src                   
│     │  ├─ assets             
│     │  │  ├─ base.css        
│     │  │  ├─ electron.svg    
│     │  │  ├─ main.css        
│     │  │  └─ wavy-lines.svg  
│     │  ├─ components         
│     │  │  └─ Versions.vue    
│     │  ├─ App.vue            
│     │  ├─ env.d.ts           
│     │  └─ main.ts            
│     └─ index.html            
├─ dev-app-update.yml          
├─ electron-builder.yml        
├─ electron.vite.config.ts     
├─ package.json                
├─ pnpm-lock.yaml              
├─ README.md                   
├─ tsconfig.json               
├─ tsconfig.node.json          
└─ tsconfig.web.json           

主要script说明

  • dev: 启动本地开发
  • start: 预览打包后的结果
  • build: 资源打包到out目录
  • build:win: 打包为exe文件

完整代码详见:free pan/electron-vite-app (gitee.com)

在渲染进程调用自定义桥函数过程

渲染进程:electron的浏览器脚本中,发起对协调者注入的api方法调用

自定义桥函数: 定义在主进程目录的函数,通过ipcMain.handle('事件名',()=>{xxx})将事件监听函数注册到主进程

协调者: 预加载脚本是协调者,通过contextBridge.exposeInMainWorld('api', api)将一系列的api方法,注入到electron的浏览器中,其方法内部是通过ipcRenderer.invoke('createDocument', name)方式,对真正的自定义桥函数发起调用

参考资料

electron+vue3全家桶+vite项目搭建【16.1】electron多窗口,pinia状态同步,扩展store方法,主动同步pinia的状态【推荐】_electron 多窗口状态共享-CSDN博客

Vite+Vue3+TypeScript+Element Plus (六) 搭建企业级轻量框架实践 - 掘金 (juejin.cn)

element-plus & unplugin-icons实现任意icon svg自动导入 - 掘金 (juejin.cn)

unplugin-icons vue3自动引入icon - 掘金 (juejin.cn)

typescript 装饰器报错的问题 - 知乎 (zhihu.com)

实践篇:Electron中如何使用SQLite存储数据 - 掘金 (juejin.cn)

inversify: npmmirror 镜像站

knex: npmmirror 镜像站

进程间通信 | Electron (electronjs.org)

electron 控制台打印乱码问题_electerm 乱码-CSDN博客

Electron中Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'". - xkfx - 博客园 (cnblogs.com)

electron js before-quit-掘金 (juejin.cn)

electron禁止改变主窗口尺寸和取消window自带的关闭最小化等_electron 禁止调整窗口大小-CSDN博客

electron框架的自定义外部配置文件的配置与读取_electron配置文件-CSDN博客

log4js日志管理(分级分类、格式化、落盘等)使用详解 - 掘金 (juejin.cn)

【Eelectron-vue】构建桌面应用(20)-electron的退出quit和exit_electron close quit-CSDN博客