当前位置: 首页 > news >正文

基于 Electron+Vite+Vue3+Sass 框架搭建

技术参考

技术描述
Electron一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。嵌入 Chromium 和 Node.js
Electron Forge用于打包和分发 Electron 应用程序的一体化工具。英文地址在此
Vite前端构建工具
Vue3用于构建用户界面的 JavaScript 框架
@vitejs/plugin-vueVite 插件,提供 Vue 单文件组件支持
Element Plus基于 Vue3 的 UI组件库
SassCSS 预处理语言

实现

第一步:创建 Electron + Vite 模板

使用官方推荐 Electron Vite 模板命令

npm init electron-app@latest my-new-app -- --template=vite

安装过程提示

> npm init electron-app@latest my-new-app -- --template=vite
✔ Locating custom template: "vite"
✔ Initializing directory
✔ Preparing template
✔ Initializing template
✔ Installing template dependencies

安装完后的目录

# 目录结构
.
├─ src                      # 主代码
|   ├─ index.css            # 样式文件 renderer.js 文件中引入
|   ├─ main.js              # 主进程脚本,初始化应用
|   ├─ preload.js           # 预加载脚本 
|   └─ renderer.js          # 渲染进程脚本
├─ forge.config.js          # forge 配置
├─ forge.env.d.ts           # forge 环境 
├─ package-lock.json        # lock 
├─ package.json             # 插件依赖
├─ vite.base.config.mjs     # vite 基础配置 
├─ vite.main.config.mjs     # vite 主配置 
├─ vite.preload.config.mjs  # vite 预加载配置
└─ vite.renderer.config.mjs # vite 渲染配置

查看 package.json 默认安装了如下插件

{"dependencies": {"@element-plus/icons-vue": "2.3.1","electron-squirrel-startup": "1.0.1","element-plus": "2.7.7","vue": "3.4.33"},  "devDependencies": {"@electron-forge/cli": "7.4.0","@electron-forge/maker-deb": "7.4.0","@electron-forge/maker-rpm": "7.4.0","@electron-forge/maker-squirrel": "7.4.0","@electron-forge/maker-zip": "7.4.0","@electron-forge/plugin-auto-unpack-natives": "7.4.0","@electron-forge/plugin-fuses": "7.4.0","@electron-forge/plugin-vite": "7.4.0","@electron/fuses": "1.8.0","electron": "31.2.1","vite": "5.3.4"}
}

启动效果如下

npm run start

在这里插入图片描述

第二步:融合 Vue3

参考官方指南中文/英文,安装 Vue3 相关插件

# vue3 插件
npm i vue# vite vue3 插件
npm i @vitejs/plugin-vue -D

修改文件 src/index.html ,加上 id="app"<body> 标签中仅有两行代码,如下

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>Hello World!</title></head><body><div id="app"></div><script type="module" src="/src/renderer.js"></script></body>
</html>

新建文件 src/App.vue

<script setup>
console.log("👋 该日志由 App.vue 记录。")
</script><template><h1>💖 你好!世界! 💖</h1><p>欢迎使用你的 Electron 程序。</p>
</template>

修改文件 src/renderer.js

import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)
app.mount('#app')

文件 vite.renderer.config.mjs 中配置 Vue 插件

import vue from '@vitejs/plugin-vue'export default defineConfig((env) => {return {plugins: [vue(),],};
});

第三步:配置 Sass

安装 sasssass-loader 插件

npm i sass sass-loader -D

然后就可在 *.vue 组件中直接使用

<style lang="scss" >
.main {width: 300px;height: 250px;
}
</style>

第四步:配置 ElementPlus

安装 element plus 和 Icon 图标(需要单独安装)

npm i element-plusnpm i @element-plus/icons-vue

新建文件 src/utils/elements.js

import * as ElementPlusIconsVue from '@element-plus/icons-vue'export const registerElIcon = (app) => {// 全局注册图标 会牺牲一点性能 ElIconXxxxfor (let i in ElementPlusIconsVue) {let name = `ElIcon${i}`;app.component(name, ElementPlusIconsVue[i])console.log(name, ElementPlusIconsVue[i]);}
}

App.vue 中设置 svg 高宽

<style>
svg {width: 1rem;height: 1rem;
}
</style>

src/remderer.js 全局引入

  • 代码第5-6行,引入所有图标和转行方法;

  • 代码第12行,全局注册图标组件,且****使用方式有改变****;

  • 代码 4, 10 行,可配置成中文;

import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs' // 配置中文
import 'element-plus/dist/index.css'
import { registerElIcon } from './utils/elements'const app = createApp(App)app.use(ElementPlus, { locale: zhCn }) // 使用中文
// 全局注册 el-icon
registerElIcon(app);
app.mount('#app')

同样,有两种使用方式:

  1. 结合 el-icon 使用,提供了额外的属性,如:is-loading等;
  2. 直接使用 SVG 图标,当做一般的 svg 使用;
<!-- 使用 el-icon 为 SVG 图标提供属性 -->
<el-icon :size="size" :color="color"><ElIconEdit  />
</el-icon>
<!-- 或者独立使用它,不从父级获取属性 -->
<ElIconEdit />

第五步:测试

新建文件 src/components/Btns.vue。此文件可测试 ElementPlusIcon 功能是否可用

<template><div><el-button>Default</el-button><el-button type="primary" icon="el-icon-folder-add">Primary</el-button><el-button type="success" icon="ElIconFolderAdd">Success</el-button><el-button type="info"><el-icon :color="color"><ElIconEdit  /></el-icon>Info</el-button><el-button type="warning"><ElIconEdit />Warning</el-button><el-button type="danger">Danger</el-button></div>
</template>

放入主页 src/App.vue

<script setup>
import Btns from './components/Btns.vue'console.log("👋 该日志由 App.vue 记录。")
</script><template><h1>💖 你好! </h1><h2>💖 Electron + Vite + Vue3 + Sass</h2><!-- 测试 组件 --><Btns />
</template><style lang="scss" >
svg {width: 1rem;height: 1rem;
}
</style>

启动

npm run start

效果如下

在这里插入图片描述

打包

暂无时间研究,可参考:

  • Squirrel.Windows

  • Zip

最后

还在学习中,作为一名资深前端(哈哈哈…自诩…),发现 Electron 越来越有趣~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python爬虫(2) --爬取网页页面
  • HydraRPC: RPC in the CXL Era——论文阅读
  • 计算机视觉9 全卷积网络
  • 在 CentOS 7 上安装 Docker 并安装和部署 .NET Core 3.1
  • FPGA-计数器
  • 控制欲过强的Linux小进程
  • 【线性代数】矩阵变换
  • 使用Top进行设备性能分析思路
  • 面试题001:Java的特点和优点,为什么要选择Java?
  • 深入Redis集群部署:从安装配置到测试验证的完整指南
  • MybatisPlus的使用与详细讲解
  • 排序算法与复杂度介绍
  • Linux的shell的date命令
  • Spring Boot 与 Amazon S3:快速上传与下载文件的完整指南
  • 从PyTorch官方的一篇教程说开去(4 - Q-table来源及解决问题实例)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [译] React v16.8: 含有Hooks的版本
  • Android开源项目规范总结
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • echarts花样作死的坑
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript实现分页效果
  • Java多态
  • java中具有继承关系的类及其对象初始化顺序
  • MobX
  • PermissionScope Swift4 兼容问题
  • PV统计优化设计
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 初识MongoDB分片
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 开源SQL-on-Hadoop系统一览
  • 那些年我们用过的显示性能指标
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 你对linux中grep命令知道多少?
  • #pragma 指令
  • #Spring-boot高级
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $jQuery 重写Alert样式方法
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Note)C++中的继承方式
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (不用互三)AI绘画工具应该如何选择
  • (七)Activiti-modeler中文支持
  • (七)Java对象在Hibernate持久化层的状态
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)jQuery 基础
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET CLR Hosting 简介
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .Net Remoting(分离服务程序实现) - Part.3
  • .Net各种迷惑命名解释