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

news2024/11/15 17:51:27

技术参考

技术描述
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-plus

npm i @element-plus/icons-vue

新建文件 src/utils/elements.js

import * as ElementPlusIconsVue from '@element-plus/icons-vue'

export const registerElIcon = (app) => {
    // 全局注册图标 会牺牲一点性能 ElIconXxxx
    for (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 越来越有趣~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙OS物联网创新应用实训解决方案

摘要&#xff1a; 随着物联网技术的飞速发展&#xff0c;各种智能设备和传感器正在以前所未有的速度融入我们的日常生活。华为推出的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;作为一款面向全场景、多设备、无缝连接的分布式操作系统&#xff0c;为物联网领域带来了全新的…

pdf文件压缩的有效方法,详解5个效果高效的文件压缩方法汇总!

在现代信息社会中&#xff0c;PDF 文件已经成为我们日常工作和学习中不可或缺的重要载体。然而&#xff0c;随着 PDF 文件内容的增多和复杂化&#xff0c;文件大小的膨胀也成为一个常见问题&#xff0c;给存储、共享和传输带来了不少挑战。本文旨在探讨如何通过有效的压缩方法来…

VScode 修改 Markdown Preview Enhanced 字体以及大纲编号

修改字体和背景颜色 按快捷键 Ctrl , 打开设置&#xff0c;搜索 markdown-preview-enhanced.previewTheme&#xff0c;选择一个黑色主题的css&#xff0c;如 github-dark.css. 修改自动编号和背景颜色 背景颜色 按 F1 或者 Ctrl Shift P&#xff0c;输入 Customize CSS…

WEB 手柄 http通信,mcu端解析代码 2024/7/23 日志

WEB 手柄 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>WEB遥控器</title> </head> &l…

【Linux】条件变量及生产者消费者模型

为什么要将这两者放在一起进行呢&#xff1f; 主要是因为生产消费与条件变量关系密切&#xff0c;正好相辅相成。 目录 条件变量&#xff1a;条件变量的引出&#xff1a;条件变量的解释与接口&#xff1a;测试代码&#xff1a; 生产者消费者模型&#xff1a;概念&#xff1a;代…

Window版本nginx修改文件访问句柄数被限制,解决大并发量访问时无法响应问题

目录 一、问题背景 二、问题分析 三、解决办法 四、查看nginx连接状态 一、问题背景 Windows版本因为文件访问句柄数被限制为1024了&#xff0c;当大并发量访问时就会无法响应。会有如下错误提示&#xff1a;maximum number of descriptors supported by select() is 1024…

强化学习学习(二)基于价值函数就能做到RL——Q-Learning Q学习

文章目录 Value funtion methods-为什么我们用回了Q函数&#xff1f;Q-iterationQ-Learning (P30) Value funtion methods-为什么我们用回了Q函数&#xff1f; 先回顾一下在AC中的基于V函数的框架&#xff1a; 另一个想法&#xff1a;不依赖梯度&#xff0c;而是直接根据值函…

vue3+vite 实现动态引入某个文件夹下的组件 - glob-import的使用

<template><div class"user-content"><HeaderTitle title"用户详情"></HeaderTitle><div class"main-content"><div><UserForm /></div><div><TableList></TableList></d…

pytest实战技巧之参数化应用

pytest是Python中最流行的测试框架之一。它提供了丰富的功能&#xff0c;可以帮助我们编写高效、可靠的测试用例。其中一个重要的功能就是参数化&#xff0c;它可以让我们用不同的数据组合来运行同一个测试用例&#xff0c;从而 提高测试覆盖率和效率。本文将介绍pytest参数化的…

python之名称空间和作用域(关键字:global和nonlocal的使用)

文章目录 前言1、名称空间和作用域1.1 引言1.2 名称空间1.2.1 内置名称空间1.2.2 全局名称空间1.2.3 局部名称空间1.2.4 名称空间的产生和销毁顺序 1.3 作用域1.3.1 全局作用域1.3.2 局部作用域1.3.3 名字的查找顺序 1.4 关键字&#xff1a;global1.5 关键字&#xff1a;nonloc…

在eclipse中导入本地的jar包配置Junit环境步骤(包含Junit中的方法一直标红的解决方法)

搭建JUnit环境 下文中我用到的本地jar包可以到我上传的资源中下载&#xff0c;不需要积分 链接&#xff1a;https://download.csdn.net/download/weixin_70987470/89571891?spm1001.2014.3001.5503 一、配置环境 跟上一篇的那种方法不一样&#xff0c;直接Add to Build Path …

MySQL的表,视图,索引创建

一。创建表 1。创建Student表 mysql> create table Student(Sno int primary key auto_increment,Sname varchar(30) not null unique,Ssex varchar(2) check (Ssex 男 or Ssex 女) not null,Sage int not null,Sdept varchar(10) default 计算机 not null); 2.创建Cour…

Linux云计算 |【第一阶段】SERVICES-DAY2

主要内容&#xff1a; DNS服务基础及搭建、特殊解析(针对地址库文件&#xff1a;DNS轮询 DNS泛域名解析 DNS别名&#xff09;、缓存DNS&#xff08;全局转发forwarders&#xff09;、DNS递归迭代&#xff08;子域授权&#xff09;、DNS主从架构搭建、DNS主从数据同步 一、DNS工…

基于Element UI内置的Select下拉和Tree树形组件,组合封装的树状下拉选择器

目录 简述 效果 功能描述 代码实现 总结 简述 基于Element UI内置的Select下拉和Tree树形组件&#xff0c;组合封装的树状下拉选择器。 效果 先看效果&#xff1a; 下拉状态&#xff1a; 选择后状态&#xff1a; 选择的数据&#xff1a; 功能描述 1、加载树结构&…

Python 使用TCP\UDP协议创建一个聊天室

server端代码&#xff1a; #encodingutf-8 # 服务端代码 import socketdef server():server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)host socket.gethostname()port 12345server_socket.bind((host, port))server_socket.listen(5)print(等待客户端连接…

如何通过一条SQL变更多个分库分表?

数据库发展到今天&#xff0c;分库分表已经不是什么新鲜话题了&#xff0c;传统的单节点数据库架构在数据量和访问频次达到一定规模时&#xff0c;会出现性能瓶颈和扩展性问题&#xff0c;而分库分表技术通过将数据分散到多个数据库实例中来分担负载&#xff0c;从而提升系统的…

粮信甄选·非凡凸现|携手中粮期货、国信证券共同见证数智交易前沿力量

近日&#xff0c;中粮期货、国信证券联合非凸科技在深圳举办了“粮信甄选&#xff0c;非凡凸现”主题机构洽谈会&#xff0c;与行业专家、私募管理人共同探讨如何推进产业与金融的深度融合&#xff0c;以及实现科技创新与生态合作的新模式。 近年来&#xff0c;国信证券始终聚…

开源物联网网关ThingsBoard IoT Gateway

前几天测试了Neuron&#xff0c;这是一个令人印象深刻的平台&#xff0c;不过它不能算是完全免费的平台&#xff0c;因为它还是有商业许可要求的&#xff0c;挺贵的&#xff0c;大几万的&#xff0c;而且它有走向闭源的趋势。所以也在寻找它的替代方案。 今天看到一个ThingsBo…

最新全新UI异次元荔枝V4.4自动发卡系统源码

简介&#xff1a; 最新全新UI异次元荔枝V4.4自动发卡系统源码 更新日志&#xff1a; 1增加主站货源系统 2支持分站自定义支付接口 3目前插件大部分免费 4UI页面全面更新 5分站可支持对接其他分站产品 6分站客服可自定义 7支持限定优惠 图片&#xff1a; 会员中心截图&…

王春城 | TPM是如何减少设备停机时间的?

在快节奏的生产环境中&#xff0c;设备停机时间无疑是每个企业都头疼的问题。它不仅影响生产效率&#xff0c;还可能造成巨大的经济损失。那么&#xff0c;有没有一种神奇的方法能够一键减少设备停机时间呢&#xff1f;答案就是--TPM&#xff08;全面生产维护&#xff09;&…