Vite 前端开发的超级加速器 - 从入门到精通

news2024/11/25 16:28:27

大家好!今天我们来聊聊前端开发中的一个革命性工具 - Vite。如果你觉得你的前端开发速度慢得像蜗牛爬,那么Vite就是为你量身打造的超级加速器!


一、什么是Vite?


Vite(法语意为"快速")是一个现代化的前端构建工具,由Vue.js的创造者尤雨溪开发。它的目标是为开发者提供更快速的开发体验。


二、Vite的作用是什么?


1、闪电般的服务器启动

Vite通过预先构建依赖项和按需编译的方式,显著减少了开发服务器的启动时间。

Vite在启动时将应用模块分为两类:依赖源码,从而优化了开发服务器的启动过程。

  • 依赖:通常是在开发过程中不会改变的纯JavaScript代码。这些大型依赖(比如包含数百个模块的组件库)的处理成本很高,并且可能以多种模块化格式存在(如ESM或CommonJS)。

    Vite利用esbuild对依赖进行预构建。esbuild使用Go语言编写,其预构建速度比用JavaScript编写的打包器快10到100倍。

  • 源码:通常包含需要转换的非纯JavaScript文件(如JSX、CSS或Vue/Svelte组件),并且经常需要编辑。不是所有的源码都需要同时加载(例如,基于路由分割的代码模块)。

    Vite以原生ESM方式提供源码。这实际上是将部分打包工作交给了浏览器:Vite仅在浏览器请求源码时进行必要的转换和按需提供。代码会根据需要动态加载,即仅在实际使用时才进行处理。


在这里插入图片描述


在这里插入图片描述


2、 即时模块热替换(HMR)


在基于打包的开发服务器中,修改源文件后需要重新构建整个包,这显然是低效的,因为更新速度会随着应用大小的增加而线性下降。


Vite能够在你修改代码时立即更新浏览器内容,无需重新加载整个页面。


在Vite中,HMR是在原生ESM上执行的。编辑文件时,Vite只需精确地使已编辑的模块及其最近的HMR边界失效(大多数情况下只是模块本身),无论应用大小如何,都能保持快速更新。


Vite还利用HTTP头来加速页面的重新加载:源码模块的请求会根据304 Not Modified进行协商缓存,而依赖模块的请求则通过Cache-Control: max-age=31536000,immutable进行强缓存,一旦缓存,就无需再次请求。


3、优化的构建过程


确保开发服务器和生产环境构建之间的最优输出和行为一致性是一项挑战。Vite提供了一套开箱即用的构建优化命令。

Vite使用Rollup进行生产环境构建,以提供更小、更快的构建产物。

Vite的构建过程是为现代web应用设计的,旨在提供最佳的性能和效率。


三、Vite 功能介绍


1、npm 依赖处理和预构建

原生 ESM 导入不支持裸模块导入,例如:

import { someMethod } from 'my-dep';

这样的导入在浏览器中会抛出错误。Vite 会自动检测所有源文件中的裸模块导入,并执行以下操作:

  • 预构建:将依赖预构建,以加快页面加载速度,并将 CommonJS/UMD 转换为 ESM 格式。这一步由 esbuild 完成,它的速度比任何基于 JavaScript 的打包器都快得多。
  • 导入重写:将导入重写为合法的 URL(例如 /node_modules/.vite/deps/my-dep.js?v=f3sf2ebd),以便浏览器能够正确地加载它们。

2、模块热替换(HMR)

Vite 提供了基于原生 ESM 的 HMR 功能。支持 HMR 的框架可以利用这一功能实现快速、精确的更新,无需重新加载页面或重置应用状态。Vite 已经将 HMR 集成到 Vue 单文件组件(SFC)和 React Fast Refresh 中,并通过 @prefresh/vite 为 Preact 提供了官方支持。

请注意,你无需手动配置这些功能。使用 create-vite 创建应用时,所选模板已经预配置了这些功能。


3、Vite 对 TypeScript 的支持


Vite 原生支持引入 .ts 文件,但这种支持仅限于转译操作。

仅转译,不检查类型

Vite 负责将 .ts 文件转译为 JavaScript,但不会执行类型检查。Vite 假设类型检查已经由集成开发环境(IDE)或构建流程处理。

Vite 有意将类型检查排除在转译过程之外,因为转译和类型检查本质上是两个不同的任务。转译可以针对单个文件进行,与 Vite 按需编译的方式完美契合。而类型检查则需要全面了解整个项目的模块关系。如果将类型检查集成到 Vite 的转译流程中,可能会影响 Vite 的快速响应优势。

Vite 使用 esbuild 将 TypeScript 转译到 JavaScript,约是 tsc 速度的 20~30 倍,同时 HMR 更新反映到浏览器的时间小于 50ms。


结语:
Vite不仅仅是一个构建工具,它代表了前端开发的未来方向。通过解决传统工具的痛点,Vite为我们带来了前所未有的开发体验。无论你是Vue、React还是其他框架的开发者,Vite都值得你尝试和探索。

准备好启动你的Vite之旅了吗?让我们一起感受前端开发的极速快感吧!

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

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

相关文章

LDR6500芯片:引领USB-C拓展坞转接器新风

在当今这个数字化浪潮汹涌澎湃的时代,手机和电脑已然深深融入我们生活的每一个角落,成为了不可或缺的关键工具。然而,不得不承认的是,它们所配备的接口数量往往有限,难以充分满足我们日益多样化、丰富化的需求。正因如…

5G 现网信令参数学习(1) - MIB

MIB消息中的参数 systemFrameNumber 000101B, subCarrierSpacingCommon scs30or120, ssb-SubcarrierOffset 6, dmrs-TypeA-Position pos2, pdcch-ConfigSIB1 { controlResourceSetZero 10, searchSpaceZero 4 }, cellBarred notBarred, intraFreqReselection allowed, sp…

nginx解决非人类使用http打开的443,解决网安漏扫时误扫443端口带来的问题

一、问题描述 正常访问https的站点时,使用网址https://www.baidu.com,但会有一种错误的访问请求http://www.baidu.com:443,一般都是非人类所为,如漏洞扫描工具,那么请求以后带来的后果是个错误页面 400 Bad Request T…

Vue及项目结构介绍

今天滴学习目标!!! 项目结构介绍1.Vue 项目文件结构2. 文件结构详解2.1 index.html2.2 src/main.js2.3 src/App.vue2.4 src/components/2.5 src/assets/2.6 package.json 3. 项目启动 首先我们先学习Vue项目结构,我们创建Vue项目时…

【专题】计算机网络之物理层

计算机网络体系结构: 1. 物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 作用:尽可能屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程 (procedu…

js.矩阵置零

链接:73. 矩阵置零 - 力扣(LeetCode) 题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],…

如何使用Java语言调用API数据

在当今的数据驱动世界中,API(应用程序编程接口)成为了连接不同服务和数据源的桥梁。无论是社交媒体数据、金融市场信息还是地理位置服务,API都能提供一种便捷的方式来获取这些数据。Java,作为最受欢迎的编程语言之一&a…

无mac电脑在苹果开发者上传构建版本

我们登录苹果开发者网站的后台,进入app store后,发现上架的页面需要上传一个构建版本。 这个构建版本的意思就是我们的应用二进制文件,是上架最重要的文件。但是在苹果开发者后台是无法直接上传这个文件的,它提示我们可以使用xco…

VSCODE c++不能自动补全的问题

最近安装了vscode,配置了C/C扩展,也按照网上说的配置了头文件路径 我发现有部分头文件是没办法解析的,只要包含这些头文件中的一个或者多个,就没有代码高亮和代码自动补全了,确定路径配置是没问题的,因为鼠…

Caffeine Cache解析(一):接口设计与TinyLFU

Caffeine is a high performance Java caching library providing a near optimal hit rate. 自动加载value, 支持异步加载基于size的eviction:frequency and recency基于时间的过期策略:last access or last write异步更新valuekey支持weak referenceva…

RK3588部署及其RKNPU工具链使用学习

文章目录 RKNPU 推理框架推理软件框架RKNPU 硬件层:RKNPU 驱动层:RKNPU 应用层 RKNN 模型RKNN 的工具链介绍RKNN 软件栈整体介绍RKNN-Toolkit2 功能介绍RKNPU2-SDK总结 开发环境搭建PC 端采用 虚拟机上的 Ubunt20.04 系统安装 anconda通过 conda 创建虚拟…

机器学习“捷径”:自动特征工程全面解析

引言 在机器学习项目中,特征工程是影响模型性能的关键步骤。它通过从原始数据中提取出更有用的特征,帮助模型更好地捕捉数据中的模式。然而,传统的特征工程过程往往需要大量的领域知识和实验调整,是一项耗时费力的工作。 近年来…

关于modbus与HMI车载侧屏通信的错误机制处理

目录 1.关于6个人机交互功能按钮逻辑图设计 2.错误处理机制 1.关于6个人机交互功能按钮逻辑图设计 初次的设计想法是按钮亮表示大家能按,但要是想在按一次,发送有效数据,就得先按亮,在按灭。这里以上料区为例,其它区…

Midjourney中文版:创意无界,绘梦成真

在数字艺术的浩瀚宇宙中,Midjourney中文版如同一颗璀璨的新星,以其独特的魅力和无限可能,引领着每一位创作者探索创意的无限边界。作为专为国内用户打造的AI绘画工具,Midjourney中文版不仅继承了原版的核心优势,更在本…

基于cloudreve(Docker应用)搭建网盘服务,用于目录的分享和在线预览。

文章目录 I 基于cloudreve(Docker应用)搭建网盘服务安装主要功能设置角色最大容量II 知识扩展:网盘类的文件预览需求背景: iOS可以直接预览PDF等常见格式文件,但是Android浏览器需要先下载文件,才能查看文件内容,因此需要搭建支持目录的分享和在线预览的MinIO文件服务提供…

【Redis】Zset类型常用命令

文章目录 一. Zset有序集合简介.二. 添加元素相关命令.2.1 向有序集合中添加元素(zadd) 三. 查询元素相关操作.3.1 查询有序集合中的元素个数( zcard zcount)3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)3.3 查询有序集合中指定成员的排名(zrank zrevrank )3.4 查…

AI大模型学习路线路径,巨详细!

大模型技术已经成为推动人工智能发展的关键力量。无论你是初学者还是有经验的开发者,想要掌握大模型应用,都需要遵循一定的学习路线。 从核心技术解析到模型微调与私有化部署,逐步深入大模型应用的世界。 这份学习路线图详细的介绍了那年每…

规划控制复现:Apollo LQR横向控制(算法原理推导与流程)

本文在前文已经搭建好的规划控制验证平台中进行LQR算法的复现: 1.车辆动力学建模 汽车轨迹跟踪误差模型示意图如下: 为车辆横向速度,为车辆纵向速度;和 分别为质心到前、 后轴的距离 ; 为车辆的横 摆角 ; 和 分别为车辆前 、 后轮的侧偏角。并设车辆…

【C++】哈希表的模拟实现

目录 一、闭散列(开放定址定法) 1、哈希表的结构: 2、哈希表的插入: 3、哈希表的查找: 4、哈希表的删除: 二、开散列(哈希桶) 1、哈希表的结构: 2、构造与析构&a…

若依前后分离版集成积木报表进行token传递

若依分离板集成积木报表就不说了需要的请移步:若依前后分离版集成积木报表-CSDN博客 考虑到前端摸鱼不干活,所以一般都是前后端都干,我这里前后端都搞上,你们直接抄,抄完接着去摸鱼,代码不美观,轻喷 一、…