插件:vite-plugin-electron

源文档地址:vite-plugin-electron

安装

npm i -D vite-plugin-electron

将vite-plugin-electron添加到vite.config.ts的插件部分

import electron from 'vite-plugin-electron/simple'export default {plugins: [electron({main: {// `build.lib.entry的快捷方式`entry: 'electron/main.ts',},preload: {//`build.rollupOptions.input的快捷方式`input: 'electron/preload.ts',},// 可选:在渲染器进程中使用Node.js APIrenderer: {},}),],

创建electron/main.ts文件并键入以下代码

import { app, BrowserWindow } from 'electron'app.whenReady().then(() => {const win = new BrowserWindow({title: 'Main window',})// You can use `process.env.VITE_DEV_SERVER_URL` when the vite command is called `serve`if (process.env.VITE_DEV_SERVER_URL) {win.loadURL(process.env.VITE_DEV_SERVER_URL)} else {// Load your filewin.loadFile('dist/index.html');}
})

将主条目添加到package.json

{
+ "main": "dist-electron/main.mjs"
}

Flat API

在大多数情况下,建议使用vite-lugin-election/简单API。如果你非常了解这个插件的工作原理,或者你想使用vite-plugin-electronic API作为低级API的二次封装,那么平面API更适合你。它也很简单,但更灵活。:)

与简单的API相比,不同之处在于它没有识别哪个条目表示预加载和对预加载的适应。

import electron from 'vite-plugin-electron'export default {plugins: [electron({entry: 'electron/main.ts',}),],
}

Flat API vs Simple API

简单API基于平面API
简单的API包含一些预加载脚本预设配置。
Flat API提供了一些更通用的API,可以用于二次封装,例如nuxt-electron。

electron(options:ElectroOptions|ElectroOptions])

export interface ElectronOptions {/*** Shortcut of `build.lib.entry`*/entry?: import('vite').LibraryOptions['entry']vite?: import('vite').InlineConfig/*** Triggered when Vite is built every time -- `vite serve` command only.** If this `onstart` is passed, Electron App will not start automatically.* However, you can start Electroo App via `startup` function.*/onstart?: (args: {/*** Electron App startup function.* It will mount the Electron App child-process to `process.electronApp`.* @param argv default value `['.', '--no-sandbox']`* @param options options for `child_process.spawn`* @param customElectronPkg custom electron package name (default: 'electron')*/startup: (argv?: string[], options?: import('node:child_process').SpawnOptions, customElectronPkg?: string) => Promise<void>/** Reload Electron-Renderer */reload: () => void}) => void | Promise<void>
}

推荐结构

让我们以基于create vite创建的官方模板vanilla ts为例

+ ├─┬ electron
+ │ └── main.ts├─┬ src│ ├── main.ts│ ├── style.css│ └── vite-env.d.ts├── .gitignore├── favicon.svg├── index.html├── package.json├── tsconfig.json
+ └── vite.config.ts

内置格式

这只是默认行为,您可以通过vite.config.js中的自定义配置随时修改它们

{ "type": "module" }
┏————————————————————┳——————————┳———————————┓
│       built        │  format  │   suffix  │
┠————————————————————╂——————————╂———————————┨
│ main process       │   esm    │    .js    │
┠————————————————————╂——————————╂———————————┨
│ preload scripts    │   cjs    │   .mjs    │ diff
┠————————————————————╂——————————╂———————————┨
│ renderer process   │    -     │    .js    │
┗————————————————————┸——————————┸———————————┛{ "type": "commonjs" } - default
┏————————————————————┳——————————┳———————————┓
│       built        │  format  │   suffix  │
┠————————————————————╂——————————╂———————————┨
│ main process       │   cjs    │    .js    │
┠————————————————————╂——————————╂———————————┨
│ preload scripts    │   cjs    │    .js    │ diff
┠————————————————————╂——————————╂———————————┨
│ renderer process   │    -     │    .js    │
┗————————————————————┸——————————┸———————————┛

JavaScript API

vite-plugin-electron的JavaScript API是完全类型化的,建议在VS Code中使用TypeScript或启用JS类型检查,以利用智能感知和验证。

electron-options
resolveViteConfig-函数,为构建Electron Main解析默认Vite的InlineConfig
带有ExternalBuiltins-功能
构建-功能
启动-功能

例子

import { build, startup } from 'vite-plugin-electron'const isDev = process.env.NODE_ENV === 'development'
const isProd = process.env.NODE_ENV === 'production'build({entry: 'electron/main.ts',vite: {mode: process.env.NODE_ENV,build: {minify: isProd,watch: isDev ? {} : null,},plugins: [{name: 'plugin-start-electron',closeBundle() {if (isDev) {// Startup Electron Appstartup()}},}],},
})

如何工作

它只是执行电子。命令,然后启动或重新启动Electron应用程序。

注意:默认情况下,electron文件夹中的文件将内置到dist-electron中。目前,Electron不支持“类型”:“模块”

原生C/C++

我们有两种方法来使用C/C++原生模块

第一种方式

一般来说,Vite可能无法正确构建Node.js包,尤其是C/C++原生模块,但Vite可以将其作为外部包加载,因此,将Node.js包放在依赖项中。除非你知道如何用Vite正确创建它们。

export default {plugins: [electron({entry: 'electron/main.ts',vite: {build: {rollupOptions: {// Here are some C/C++ modules them can't be built properlyexternal: ['serialport','sqlite3',],},},},}),],
}

第二种方式

使用https://github.com/vite-plugin/vite-plugin-native

import native from 'vite-plugin-native'export default {plugins: [electron({entry: 'electron/main.ts',vite: {plugins: [native(/* options */),],},}),],
}

Not Bundle

在开发阶段,我们可以从bundle中排除npm-pkg的cjs格式。就像Vite的Not Bundle。它很快!

import electron from 'vite-plugin-electron'
import { notBundle } from 'vite-plugin-electron/plugin'export default defineConfig(({ command }) => ({plugins: [electron({entry: 'electron/main.ts',vite: {plugins: [command === 'serve' && notBundle(/* NotBundleOptions */),],},}),],
}))

api    (notBundle(/* NotBundleOptions */))

export interface NotBundleOptions {filter?: (id: string) => void | false
}

如何使用

让我们以electron-log 为例。

┏—————————————————————————————————————┓
│ import log from 'electron-log'      │
┗—————————————————————————————————————┛↓
Modules in `node_modules` are not bundled during development, it's fast!↓
┏—————————————————————————————————————┓
│ const log = require('electron-log') │
┗—————————————————————————————————————┛

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

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

相关文章

3 - 大的国家(高频 SQL 50 题基础版)

3.大的国家 -- 查询属性&#xff1a;国家名称、人口和面积 select name,population,area fromWorld where area>3000000 OR population>25000000;

组件框架信息泄露

后端spring-boot框架 actuator组件信息泄露 Actuator是Spring-Boot提供的服务监控和管理中间件&#xff0c;默认配置会出现接口未授权 访问&#xff0c;部分接口会泄露网站流量信息和内存信息等&#xff0c;使用Jolokia库特性甚至可以远程执行任意代码&#xff0c;获 取服务器…

科技赋能,无障碍出行的新纪元

在现代社会&#xff0c;公共设施的建设不仅是衡量城市文明程度的标尺&#xff0c;更是实现社会公平与包容的重要载体。对于盲人群体而言&#xff0c;一个完善的公共设施网络&#xff0c;意味着他们能够更加独立、自信地融入社会&#xff0c;享受与视力健全者同等的公共服务与便…

CSS实现图形效果

CSS实现图形效果 CSS实现正方形、长方形、圆形、半圆、椭圆、三角形、平行四边形、菱形、梯形、六角星、五角星、心形、消息框。 正方形 <section><div id"square"></div> </section> <style type"text/css">#square{wid…

使用onnxruntime加载YOLOv8生成的onnx文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

干货!如何在Jmeter中实现对NCR响应的解析

最近做接口测试时发现了一个问题&#xff0c;部分请求的响应是通过NCR编码实现的&#xff0c;这样就导致了无法对这些请求进行断言&#xff0c;为了解决这个问题进行了如下调研&#xff0c;大家可以参考下面两篇文章&#xff1a; 使用Java apache commons包五分钟搞定NCR解析&…

CCIG 2024:大模型技术及其前沿应用论坛深度解析

一、CCIG论坛介绍 中国图象图形大会&#xff08;CCIG 2024&#xff09;是一场备受瞩目的学术盛会&#xff0c;近期在陕西省西安市曲江国际会议中心举行。这次会议以“图聚智生&#xff0c;象合慧成”为主题&#xff0c;由中国图象图形学学会主办&#xff0c;旨在汇聚图像图形领…

架构每日一学 14:架构师如何进行可行性探索?

架构活动中&#xff0c;如果不进行可行性探索可能会导致重大失误&#xff0c;为企业发展带来风险。 可行性探索是架构活动的最后一个节点&#xff0c;在这之后的架构活动就像是离弦之箭&#xff0c;即便发现重大风险也很难再回头了。 互联网公司之间的竞争非常激烈&#xff0…

elementUI中,el-table-column中设定min-width无效的解决办法

方案一&#xff1a;必须为所有的列都设置min-width&#xff0c;只设定几项是无法生效的。而且不能使用px。 <el-table-column ......(省略其它设置) :min-width"122" ......(省略其它设置) </el-table-column>

ABAP 长文本编辑器弹窗控件

前言 用户想在ALV上编辑长文本&#xff0c;但是ALV只有128个字符肯定是不够用的&#xff0c;所以需要用一个长文本编辑器来输入&#xff0c;本来想自己写的&#xff0c;发现有标准的函数&#xff0c;还挺好用的 代码 在用户双击ALV字段时&#xff0c;触发下述form&#xff0…

Go 语言中的切片:灵活的数据结构

切片&#xff08;slice&#xff09;是 Go 语言中一种非常重要且灵活的数据结构&#xff0c;它提供了对数组子序列的动态窗口。这使得切片在 Go 中的使用非常频繁&#xff0c;特别是在处理动态数据集时。本文将探讨切片的概念、操作和与函数的交互&#xff0c;以及如何有效地使用…

Less的简单总结

Less 是一个开源的 CSS 预处理器&#xff0c;它扩展了 CSS 语言&#xff0c;增加了变量、嵌套规则、运算符、函数等特性&#xff0c;使编写 CSS 更加高效、灵活且易于维护。下面是对 "Less" 的一个总结文档&#xff1a; 简介 名称&#xff1a;Less&#xff08;通常表…

使用Rufus工具制作Ubuntu To Go——很详细

一、准备工作 准备工具&#xff1a; 1、下载Rufus(主角)软件 2、准备一个U盘或硬盘&#xff08;小白128G足够&#xff0c;装Ubuntu系统&#xff09; 3、下载Ubuntu系统镜像文件 1、下载软件Rufus 先来看一下官网介绍&#xff1a; Rufus 是一款格式化和创建 USB 启动盘的辅助工…

“GPT-4o深度解析:技术演进、能力评估与个人体验综述“

文章目录 每日一句正能量前言对比分析模型架构性能应用场景用户体验技术创新社区和生态系统总结 技术能力语言生成能力语言理解能力技术实现总结 个人感受关于GPT-4o的假设性观点&#xff1a;关于当前语言模型的一般性观点&#xff1a; 后记 每日一句正能量 又回到了原点&#…

Objective-C中分类无法添加实例变量的底层原理

在 Objective-C 中&#xff0c;分类&#xff08;category&#xff09;无法添加实例变量&#xff0c;这是由于底层实现的限制。要理解这一点&#xff0c;需要先了解 Objective-C 的类和对象内存布局及运行时机制。 类和对象的内存布局 在 Objective-C 中&#xff0c;每个对象都…

“智能分析赋能等保:大数据技术在安全审计记录中的应用“

智能分析技术在信息安全领域&#xff0c;尤其是等保&#xff08;等级保护&#xff09;合规性方面&#xff0c;发挥了关键作用。特别是结合大数据技术&#xff0c;安全审计记录的处理和分析能力得到了显著增强。以下几点阐述了大数据技术是如何赋能等保安全审计的&#xff1a; …

【Python】 Python中的functools.wraps:装饰器的优雅包装

基本原理 在Python中&#xff0c;装饰器是一种非常强大的工具&#xff0c;它允许我们以一种非常灵活的方式修改或增强函数的行为。装饰器本质上是一个函数&#xff0c;它接收一个函数作为参数&#xff0c;并返回一个新的函数。然而&#xff0c;当我们使用装饰器时&#xff0c;…

python输出字符串的几种方式

使用 print() 函数 这是最基础和常用的输出方式。它可以直接输出字符串,也可以输出其他数据类型,如数字、列表等。 name "Alice" age 25 print(name) # Output: Alice print("My name is", name, "and Im", age, "years old.") #…

【笔记】Sturctured Streaming笔记总结(Python版)

目录 相关资料 一、概述 1.1 基本概念 1.2 两种处理模型 &#xff08;1&#xff09;微批处理 &#xff08;2&#xff09;持续处理 1.3 Structured Streaming和Spark SQL、Spark Streaming关系 二、编写Structured Streaming程序的基本步骤 三、输入源 3.1 File源 &a…

Docker 基础使用 (1) 使用流程概览

文章目录 Docker 软件安装Docker 镜像仓库Docker 仓库指令Docker 镜像指令Docker 容器指令Docker 使用实例 —— 搭建 nginx 服务nginx 概念nginx 使用用 docker 启动 nginx Docker 基础使用&#xff08;0&#xff09;基础认识 Docker 基础使用 (1) 使用流程概览 Docker 基础使…