前端构建工具 Vite

news2024/11/24 7:38:19

文章目录

  • 参考
  • 环境
  • 构建工具
      • 构建工具的主要功能
      • 目前主流的前端构建工具
  • Vite
  • 为什么使用 Vite
      • 冷启动
          • Webpack
          • Vite
      • 热更新优化
          • 热更新
          • 优化
      • 预构建依赖
      • Webpack VS Vite
  • Vite 的缺点
      • 首屏性能
      • 懒加载
  • 与 Vite 相关的基本操作
      • 获取
          • create-vite
      • 创建项目
          • Project name
          • Select a framework
          • Select a variant
          • Finish
      • 基础依赖项
      • 运行项目

参考

项目描述
0o华仔o0漫谈构建工具(四): 为什么有人说 vite 快,有人却说 vite 慢?
Vite官方中文文档
搜索引擎Google
老尚带你学前端vite-新一代的前端构建工具,从零开始

环境

项目描述
操作系统Window 10 专业版
create-vite4.1.0
nodev18.13.0
npm8.19.3
编辑器VScode

构建工具

构建工具的主要功能

项目描述
代码降级处理将存在兼容性问题的代码进行降级处理,尽可能地使页面中的所有功能在任何浏览器中都可以正常执行。
提供对前端工程化开发的支持兼容多种模块化规范(CommonJS、ES Module 等)、提供模块的加载方案。
监听监听本地源代码文件的变化,并在文件发生变化时将变化的结果立即呈现在浏览器的特定页面中。
转译TypeScriptLess 等内容转换为浏览器能够识别的语言(HTML、CSS、JavaScript 等)。
压缩在将项目文件打包至生产环境时对源代码文件进行压缩以减小项目文件的总体积。
热更新在本地对源代码文件进行修改并保存后,构建工具将仅对发生变动的文件进行替换而不影响项目中的其他文件,提高开发效率。

目前主流的前端构建工具

项目特点
Parcel零配置,开箱即用。
Webpack功能强大。
Rollup功能强大。
Vite速度快(开发体验优秀)。

Vite

Vite

Vite(法语意为 “快速的”,发音 /vit/,发音同 “veet”)是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:

  1. 一个开发服务器,它基于 原生 ES Module 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)

  2. 一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源。

Vite 意在提供 开箱即用 的配置,同时它的 插件 APIJavaScript API 带来了高度的可扩展性,并有完整的类型支持。

为什么使用 Vite

当我们开始构建越来越大型的应用时,需要处理的 JavaScript 代码量也呈指数级增长。包含数千个模块的大型项目相当普遍。基于 JavaScript 开发的工具就会开始遇到性能瓶颈:
通常需要很长时间(甚至是几分钟!)才能启动开发服务器,即使使用模块热替换(HMR),文件修改后的效果也需要几秒钟才能在浏览器中反映出来。如此循环往复,迟钝的反馈会极大地影响开发者的开发效率和幸福感。

Vite 旨在利用生态系统中的新进展解决上述问题:

  1. 浏览器开始原生支持 ES 模块。
  2. 越来越多 JavaScript 工具使用编译型语言编写(程序执行速度得到显著提升)。

冷启动

Webpack

Webpack 能大行其道,归功于它划时代的采用了 bundle 机制。通过这种机制,Webpack 可以将项目中各种类型的源代码文件转化为浏览器能够识别的文件类型。Webpack 还将建立源文件之间的依赖关系,并将数量庞大的源文件合并为少量的几个输出文件。

在通过 Webpack 启动项目时,Webpack 将从入口文件(entry)开始构建依赖关系图,并通过依赖关系图对这些依赖进行处理,在处理完成后,Webpack 才能够向您提供服务。

流程图

Vite

Vite 采用了与 Webpack 截然不同的 unbundle 机制。在该机制的作用下,Vite 将模块间的依赖关系交由浏览器进行处理(浏览器能够识别 ES Module 规范,为此 Vite 需要将非 ES Module 规范的代码进行转换),在浏览器需要用到某个模块时,它将向服务器端发起请求,Vite 在接收到请求后对客户端请求的模块进行处理并将该模块提供给客户端。

Vite 在向客户提供服务前并不需要处理所有的依赖,所以在速度上相比其他工具具有明显的优势。

流程图

热更新优化

热更新

一些打包器的开发服务器将构建内容存入内存,这样它们只需要在文件更改时使,但它也仍需要整个重新构建并重载页面。这样代价很高,并且重新加载页面会消除应用的当前状态,所以打包器支持了动态模块热替换(HMR):
允许一个模块 “热替换” 它自己,而不会影响页面其余部分。这大大改进了开发体验 —— 然而,在实践中我们发现,即使采用了 HMR 模式,其热更新速度也会随着应用规模的增长而显著下降。

优化

在 Vite 中,HMR 是在原生 ESM 上执行的。当项目中的一个文件发生修改时,客户端 只需要向开发服务器请求被修改的文件即可,使得无论应用大小如何,HMR 始终能保持快速更新。

Vite 同时利用 HTTP 头来加速整个页面的重新加载:

  1. 源码模块(自定义模块)的请求会根据 304 Not Modified 进行协商缓存。
  2. 依赖模块(第三方模块及内置模块)请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。

预构建依赖

Vite 将会使用 esbuild 预构建依赖。esbuild 使用 Go 编写,并且比以 JavaScript 编写的打包器(比如 Webpack)预构建依赖快 10-100 倍。

Webpack VS Vite

Vite 在将项目打包到生产环境时,使用的工具是 Rollup。因此,Vite 相比于 Webpack 的优势主要体现在开发阶段。Vite 使用原生 ESM 文件,无需打包,可以更快速的为客户提供服务。

Vite 的缺点

首屏性能

由于 Vite 仅在浏览器请求某个模块时才会对该模块发起请求,所以在首次进入网页时将浏览器将向客户端发起大量请求,服务器端也不得不处理大量的源代码文件并将这些文件发送给客户端,这也就导致了使用 Vite 进行开发时,首屏性能相对其他构建工具更差。但 Vite 使会对资源进行缓存,后续访问相同页面将更为迅速。

懒加载

Vite 在懒加载过程中存在的缺陷与首屏性能缺陷的原理类似,都是由于突然需要处理大量数据而导致的问题。

与 Vite 相关的基本操作

获取

Vite 是基于 NodeJS 的,所以在进行后续操作前请先安装 Node

注:

Vite 需要 Node.js 版本 14.18+16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

create-vite

如果你使用的是 npm ,那么你可以通过在终端执行如下命令以对 create-vite 进行下载安装:

npm create vite

如果使用该命令前你未对 create-vite 进行安装,那么执行该命令后,终端中将出现如下提示信息(类似):

Need to install the following packages:
  create-vite@4.1.0
Ok to proceed? (y)

请在终端中敲击键盘 y 并回车以开始安装。

在通过该方式安装完成后,终端中将出现如下提示信息用以引导你创建合适的项目。

? Project name: » vite-project

除了使用上述的方式对 create-vite 进行安装外,你也可以通过如下命令进行安装:

npm install create-vite

或全局安装:

npm install create-vite

创建项目

在完成 create-vite 的安装后,在终端中输入如下命令以开始对项目的创建。

npm create vite
Project name

在创建项目过程中,你将在终端中观察到如下信息:

? Project name: » vite-project

请输入你需要创建的项目的名称。当然你也可以直接按下回车键使用 create-vite 提供的默认的项目名称 vite-project

Select a framework

在终端中观察到如下信息后,你可以通过键盘中的上下箭头来选择创建合适的框架对应的项目,通过敲击回车键进行确定。

这里我将选择 Vue

提示信息

Select a variant

选择在项目中是否需要使用 TypeScript(TypeScript 是 JavaScript 的超集)。这里我将选择 JavaScript ,表示将不在项目中使用 TypeScript 来编写代码。

提示信息

Finish

在创建项目完成后,你将在当前工作目录下观察到项目文件:

项目文件的目录结构

基础依赖项

使用 Vite 来运行项目需要安装一些依赖项,你可以在创建的项目中的 package.json 文件中观察到这些依赖项:

"dependencies": {
    "vue": "^3.2.45"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.0.0",
    "vite": "^4.1.0"
  }

请先在终端中使用 cd 命令切换工作目录至您创建的项目的根目录中,并执行如下命令以安装所需要的所有依赖项。

npm install

运行项目

当前述操作都已执行完毕后,请在终端中输入如下命令以运行项目:

npm run dev

在项目运行成功后,你将在终端中观察到如下信息:

提示信息

请访问终端中提供的链接地址以访问项目。

访问结果:
项目

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

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

相关文章

信息系统与信息化

1.1 信息系统与信息化 1.1.1 信息的基本概念 信息质量属性(掌握)信息传输模型 1.1.2 信息系统的基本概念1.1.3 信息化的基本概念 信息化的五个层次信息化基本内涵信息化的基本概念(了解)六要素关系图(掌握) 1.1.4 信息系统生命周…

Qml学习——动态加载控件

最近在学习Qml,但对Qml的各种用法都不太熟悉,总是会搞忘,所以写几篇文章对学习过程中的遇到的东西做一个记录。 学习参考视频:https://www.bilibili.com/video/BV1Ay4y1W7xd?p1&vd_source0b527ff208c63f0b1150450fd7023fd8 目…

91.【SpringBoot-03】

SpringBoot-03(十四)、任务1.异步任务2.邮件任务(1).简单邮箱发送(2).复杂邮箱发送3.定时任务(1).cron表达式(2).特殊表达式(3).定时任务测试(4).常用cron表达式(十五)、Dubbo和Zookeeper集成1.分布式原理(1).Dubbo文档2.什么是RPC?3.Dubbo的概念和介绍(1).Dubbo是什么(2). Du…

详细聊聊spring核心思想

犹记我当年初学 Spring 时,还需写一个个 XML 文件,当时心里不知所以然,跟着网上的步骤一个一个配置下来,配错一个看着 error 懵半天,不知所谓地瞎改到最后能跑就行,暗自感叹 tmd 这玩意真复杂。 到后来用上…

最短路之Dijkstra(15张图解)

🌼多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 闲来无事听听歌 Dijkstra可解决“单源最短路径”问题 四种最短路算法 Floyd算法 时间复杂度高,但实现容易(5行核心代码),可解决负权边,适用于数据范围…

凭借这份《2022测试八股文》候选者逆袭面试官,offer拿到手软

《2023测试面试八股文》800 道软件测试面试真题,高清打印版打包带走,横扫软件测试面试高频问题,涵盖测试理论、Linux、MySQL、Web 测试、接口测试、App 测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维…

opencv——傅里叶变换、低通与高通滤波及直方图等操作

1、傅里叶变换a、傅里叶变换原理时域分析:以时间为参照进行分析。频域分析:相当于上帝视角一样,看事物层次更高,时域的运动在频域来看就是静止的。eg:投球——时域分析:第1分钟投了3分,第2分钟投…

“学好英语网”首页制作

“学好英语网”首页制作一、实验名称:二、实验日期:三、实验目的:四、实验内容:五、实验步骤:六、实验结果:七、源程序:八、心得体会:一、实验名称: “学好英语网”首页…

Linux第三讲

目录 三、 磁盘和文件管理和使用检测和维护 3.1 磁盘目录 3.2 安装软件 3.2.1 rpm命令 3.2.2 克隆虚拟机 3.2.3 yum或压缩包方式安装jdk 3.2.4 使用虚拟机运行SpringBoot项目 3.2.5 安装mysql80(57) 3.2.6 运行web项目 3.2.7 安装tomcat 三、 …

情人节前夕,竞品在小红书平台如何布局营销策略?

情人节作为全球性消费型节日之一,其营销价值不言而喻。以女性用户群体为主导的小红书平台,更是成为该营销节点众多品牌争夺流量的阵地。 那么,情人节前夕竞品在小红书平台布局什么样的营销策略?创作何种内容,如何推广&…

手把手教你用Python做可视化数据,还能调节动画丝滑度

数据可视化动画还在用Excel做? 现在一个简单的Python包就能分分钟搞定! 而且生成的动画也足够丝滑,效果是酱紫的: 这是一位专攻Python语言的程序员开发的安装包,名叫Pynimate。 目前可以直接通过PyPI安装使用。 使用…

线程池小结

什么是线程池 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象; 为什么使用线程池 …

1001. x+y 1002. x+y+z etiger.vip 解析与答案

目录 1001题 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例#1: 输出样例#1: 头文件和数组等初始定义 第一个函数——converts 第二个函数——add 第三个函数——print 主函数部分 完整代码 1002题 题目描述 输入输出格式 输入格式 输出格…

Vue3快速入门【一】

Vue3快速入门一、Vue脚手架1.1、Vite简介1.2、创建项目二、更换Vue模板支持工具三、项目相关命令解析四、生命周期钩子函数五、ref方法的几种使用方式5.1、ref方法(操作基本类型数据)5.2、ref方法(操作复杂类型数据)5.3、ref方法获取标签六、reacttive方法和toRefs方法七、setu…

开发人员 ONLYOFFICE 文档 v7.3:API 与文档生成器更新

随着版本 7.3 新功能的发布,我们也对编辑器、插件以及文档生成器的 API 进行了更新。在下方了解更多详情。 增强的 WOPI 支持 从现在开始,您可在 WOPI 集成中使用二进制格式,如 doc、ppt 以及 xls。我们现已实现了相应方案,其中包…

ClickHouse 合并树表引擎 MergeTree 索引与数据存储方式

目录 1. 一级索引 1.1 稀疏索引 1.2 索引粒度 1.3 索引数据的生成规则 1.4 索引的查询过程 2. 二级索引 2.1 granularity 与 index_granularity 2.2 跳数索引的生成规则

阿里6面,成功唬住面试官拿了27K,软件测试面试也没有传说中那么难吧....

阿里的面试挺独特,每轮面试都没有 HR 约时间,一般是晚上 8 点左右面试官来一个电话,问是否能面试,能的话开始面,不能就约一个其它时间。 全程 6 面,前五面技术面,电话面试,最后一面…

KEITHLEY吉时利2410数字源表

产品概览 Keithley 2410 高压源表专为需要紧密耦合源和测量的测试应用而设计。Keithly 2410 提供精密电压和电流源以及测量功能。它既是高度稳定的直流电源,又是真正的仪器级 5-1/2 数字万用表。电源特性包括低噪声、精度和回读。万用表功能包括高重复性和低噪声。…

《真象还原》读书笔记——第三章 完善MBR(3.5 硬盘)

3.5 硬盘介绍 3.5.2 硬盘工作原理 柱面-磁头-扇区 磁道的编号从0 开始,相同编号的此道组成的管状区域就是柱面。 盘面和磁头一一对应,所以用磁头号表示盘面,磁头编号从上到下从0开始。 扇区编号与盘面和磁道不同,各磁道内的扇区都…

选择万德L2接口需要遵循什么原则?

万德L2接口是一种可以让程序拥有查询股票相关数据的应用查询编程接口,通过这个数据接口,可以直接调用相应的数据,而不用进行额外的编程工作,甚至不需要理解其中的工作机制,是十分方便快捷的一种数据接口。 但是市场上…