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

第4章 Vite模块化与插件系统(二)

4.3 常用插件介绍

4.3.1 官方插件

@vitejs/plugin-vue

用于支持 Vue.js 开发:

npm install @vitejs/plugin-vue --save-dev
import vue from '@vitejs/plugin-vue'export default defineConfig({plugins: [vue()]
})
@vitejs/plugin-react

用于支持 React 开发:

npm install @vitejs/plugin-react --save-dev
import react from '@vitejs/plugin-react'export default defineConfig({plugins: [react()]
})

4.3.2 社区插件

vite-plugin-legacy

用于支持旧浏览器:

npm install @vitejs/plugin-legacy --save-dev
import legacy from '@vitejs/plugin-legacy'export default defineConfig({plugins: [legacy({targets: ['defaults', 'not IE 11']})]
})
vite-plugin-compression

用于压缩输出的资源文件:

npm install vite-plugin-compression --save-dev
import compression from 'vite-plugin-compression'export default defineConfig({plugins: [compression()]
})

4.3.3 插件组合

你可以将多个插件组合使用,以满足不同的需求:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import legacy from '@vitejs/plugin-legacy'
import compression from 'vite-plugin-compression'export default defineConfig({plugins: [vue(),legacy({targets: ['defaults', 'not IE 11']}),compression()]
})

4.4 创建自定义插件

Vite 的插件系统允许开发者根据需求创建自定义插件。以下是一个详细的创建自定义插件的示例。

4.4.1 示例:日志插件

创建一个简单的日志插件,记录每个模块的加载时间。

4.4.1.1 实现插件
// vite-plugin-logger.js
export default function loggerPlugin() {return {name: 'logger-plugin',async load(id) {const start = Date.now()const result = await this.load(id)const end = Date.now()console.log(`Module ${id} loaded in ${end - start}ms`)return result}}
}
4.4.1.2 配置插件
import { defineConfig } from 'vite'
import loggerPlugin from './vite-plugin-logger'export default defineConfig({plugins: [loggerPlugin()]
})

4.4.2 高级插件示例:SVG 图标插件

这个插件将 SVG 文件作为 Vue 组件导入。

4.4.2.1 实现插件
// vite-plugin-svg.js
import { createFilter } from 'vite'export default function svgPlugin(options = {}) {const filter = createFilter(options.include || '**/*.svg', options.exclude)return {name: 'svg-plugin',transform(src, id) {if (!filter(id)) returnreturn `export default { template: \`${src}\` }`}}
}
4.4.2.2 配置插件
import { defineConfig } from 'vite'
import svgPlugin from './vite-plugin-svg'export default defineConfig({plugins: [svgPlugin()]
})

4.5 插件调试与优化

插件调试和优化是确保插件高效运行的关键。本节将介绍一些调试技巧和优化方法。

4.5.1 调试插件

4.5.1.1 使用 console.log

在插件中使用 console.log 打印调试信息。例如:

export default function loggerPlugin() {return {name: 'logger-plugin',async load(id) {console.log(`Loading module: ${id}`)const result = await this.load(id)console.log(`Module loaded: ${id}`)return result}}
}
4.5.1.2 使用断点调试

在插件代码中设置断点,然后在 Vite 启动时通过浏览器调试工具进行断点调试。

4.5.2 优化插件性能

4.5.2.1 减少不必要的计算

确保插件只对需要处理的文件进行操作。例如,使用 createFilter 函数创建文件过滤器:

import { createFilter } from 'vite'export default function myPlugin() {const filter = createFilter('**/*.js', 'node_modules/**')return {name: 'my-plugin',transform(code, id) {if (!filter(id)) return// 插件逻辑}}
}
4.5.2.2 缓存计算结果

对于重复的计算结果,可以进行缓存以提高性能。例如:

const cache = new Map()export default function myPlugin() {return {name: 'my-plugin',transform(code, id) {if (cache.has(id)) {return cache.get(id)}const result = /* 插件逻辑 */cache.set(id, result)return result}}
}

相关文章:

第4章 Vite模块化与插件系统(二)

4.3 常用插件介绍 4.3.1 官方插件 vitejs/plugin-vue 用于支持 Vue.js 开发: npm install vitejs/plugin-vue --save-devimport vue from vitejs/plugin-vueexport default defineConfig({plugins: [vue()] })vitejs/plugin-react 用于支持 React 开发&#xf…...

前端传到后端的data数组中有些属性值为空

将前端输入框中的值全部放入data中传入后端,但是在后端查看发现后端接收到的数据有些属性值为空。 第一种情况:只有第一个属性为空,其余属性接收正常 可能原因:后端用来接收的 比如前端发送数据: 实际上前端发送的数…...

怎么批量下载网页里的图片和视频 如何批量下载一个网站的所有图片 如何批量下载网页视频文件 idm软件怎么下载

当我们在网站内需要下载大量图片时,一张一张的下载非常麻烦。这里推荐大家使用IDM这款网页图片下载工具。下面,我将介绍怎么批量下载网页里的图片和视频,如何批量下载一个网站的所有图片的解决方法。 一、怎么批量下载网页里的图片和视频 …...

Python面试题:在 Python 中,如何处理文件操作?

在Python中,文件操作(如读取和写入文件)是一个常见的任务。Python标准库提供了内置的函数和上下文管理器来简化文件操作。以下是处理文件操作的一些基本方法和示例: 打开和关闭文件 使用open()函数打开文件。该函数返回一个文件…...

红日靶机1

靶场环境 使用kali攻击web服务器,然后根据web服务器攻击其他域内的机器 这里很明确kali是攻击机,外网机器,局域网中的win7是web服务器,有2个网卡,通内网和外网,2k3以及2008r2是内网机器,不出网&…...

Windows电脑PC使用adb有线跟无线安装apk包

在Android开发中,经常需要使用ADB(Android Debug Bridge)来安装APK包到Android设备上,无论是通过有线连接还是无线连接。以下将分别介绍如何通过有线和无线方式使用ADB安装APK包。 有线连接安装APK 启用开发者选项和USB调试&…...

如何把harmonos项目修改为openharmony项目

一开始分不清harmonyos和openharmony,在harmonyos直接下载的开发软件,后面发现不对劲,打脑阔 首先你要安装对应版本的开发软件,鸿蒙开发是由harmonyos和openharmony官网两个的,找到对应的地方下载对应版本的开发软件&…...

【QT】Qt智能指针QPointer、QSharedPointer、QWeakPointer、QScopedPointer

QPointer QPointer can only point to QObject instances. It will be automatically set to nullptr if the pointed to object is destroyed. It is a weak pointer specialized for QObject. QPointer只能指向QObject实例。如果指向的对象被销毁,它将自动设置为 …...

设计模式探索:建造者模式

1. 什么是建造者模式 建造者模式 (Builder Pattern),也被称为生成器模式,是一种创建型设计模式。 定义:将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式要解决的问题: 建造者模…...

[Go] 字符串遍历数据类型问题

字符串遍历问题 在使用for i,v:range str遍历字符串时 str[i]是unit8(byte)类型,返回的是单个字节 字符串在Go中是以字节序列的形式存储的,而 str[i] 直接访问了这个字节序列中的第 i 个字节。如果字符串中的字符是单字节的ASCII…...

HJ41 称砝码

HJ41 称砝码 提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 这个题目之前是没有做出来的&#xff0c;我把之前没做出来的代码也记录一下 二、 2.1 之前的代码 #include <stdio.h>int m…...

如何使用Python脚本实现SSH登录

调试IDE&#xff1a;PyCharm Python库&#xff1a;Paramiko 首先安装Paramiko包到PyCharm&#xff0c;具体步骤为&#xff1a;在打开的PyCharm工具中&#xff0c;选择顶部菜单栏中“File”下的“Settings”&#xff0c;在设置对话框中&#xff0c;选择“Project”下的“Proje…...

2024年文化研究与数字媒体国际会议 (CRDM 2024)

2024年文化研究与数字媒体国际会议 (CRDM 2024) 2024 International Conference on Cultural Research and Digital Media 【重要信息】 大会地点&#xff1a;珠海 大会官网&#xff1a;http://www.iccrdm.com 投稿邮箱&#xff1a;iccrdmsub-conf.com 【注意&#xff1a;稿将…...

14-52 剑和诗人26 - RAG 和 VectorDB 简介

检索增强生成 (RAG) 和 VectorDB 是自然语言处理 (NLP) 中的两个重要概念&#xff0c;它们正在突破 AI 系统所能实现的界限。 在这篇博文中&#xff0c;我将深入探讨 RAG&#xff0c;探索其工作原理、应用、优势和局限性。 我们还将研究 VectorDB&#xff0c;这是一种专用于向…...

如果MySQL出现 “Too many connections“ 错误,该如何解决?

当你想要连接MySQL时出现"Too many connections" 报错的情况下&#xff0c;该如何解决才能如愿以偿呢&#xff1f;都是哥们儿&#xff0c;就教你两招吧&#xff01; 1.不想重启数据库的情况下 你可以尝试采取以下方法来解决&#xff1a; 增加连接数限制&#xff1a…...

论文阅读:Rethinking Interpretability in the Era of Large Language Models

Rethinking Interpretability in the Era of Large Language Models 《Rethinking Interpretability in the Era of Large Language Models》由Chandan Singh、Jeevana Priya Inala、Michel Galley、Rich Caruana和Jianfeng Gao撰写&#xff0c;探讨了在大型语言模型&#xff…...

C++/Qt 信号槽机制详解

文章目录 C++/Qt 信号槽机制详解一、信号和槽的基本概念1. 信号2. 槽3. 连接二、信号和槽的基本使用1. 信号和槽的声明和定义2. 连接信号和槽三、信号和槽的工作原理1. MOC(Meta-Object Compiler)2. 事件循环3. 连接类型四、信号和槽的高级应用1. 自定义信号和槽2. Lambda 表…...

duplicate key value violates unique constraint

duplicate key value violates unique constraint 遇到的问题 你在尝试向数据库表 goods 插入新记录时&#xff0c;收到了 duplicate key value violates unique constraint 的错误。尽管你确认数据库中没有与尝试插入的 id 相同的记录&#xff0c;但错误依旧存在。进一步的调…...

YOLOv10改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv10的重大改进&#xff0c;特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体&#xff0c;如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU&#xff0c;还融合了“Focus”思想&#xff0c;创造了一系列新的损失函数。这些组合形式的…...

docker nginx mysql redis

启动没有数据卷的nginx docker run -d -p 86:80 --name my-nginx nginx把/etc/nginx中的配置复制到宿主机 docker cp my-nginx:/etc/nginx /home/nginxlkl把/html 中的文件复制到宿主机 docker cp my-nginx:/etc/nginx /home/nginxlkl删除当前镜像 docker rm -f my-nginx重新起…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...