Vite详解

news2025/1/16 8:10:46

目录

  • 前言
  • 一、Vite简介
    • 1. Vite组成
    • 2.为什么选 Vite?
  • 二、Vite的优缺点
    • 1.vite优点
    • 2.vite缺点
  • 三、使用Vite创建Vue3项目
    • 1. 创建 vite 的项目
    • 2.项目的结构

前言

构建工具 Vite,目前只有vue3才可以使用Vite,如果本文对你有所帮助请三连支持博主。

一、Vite简介

Vite 是一种面向现代浏览器的一个更轻、更快的前端构建工具,能够显著提升前端的开发体验。除了Vite外,前端著名的构建工具还有Webpack和Gulp。目前,Vite已经发布了Vite2,Vite全新的插件架构、丝滑的开发体验,可以和Vue3的完美结合。

1. Vite组成

一个开发服务器,它基于原生 ES 模块提供了丰富的内建功能,如模块热更新(HMR)。一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可以输出用于生产环境的优化过的静态资源。总的来说,Vite希望提供开箱即用的配置,同时它的插件API和JavaScript API带来了高度的可扩展性。不过,相比Vue-cli配置来说,Vite构建的项目还是有很多的配置需要开发者自己进行处理。

2.为什么选 Vite?

时过境迁,我们见证了诸如 webpack、Rollup 和 Parcel 等工具的变迁,它们极大地改善了前端开发者的开发体验。

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

Vite 旨在利用生态系统中的新进展解决上述问题:浏览器开始原生支持 ES 模块,且越来越多 JavaScript 工具使用编译型语言编写。

二、Vite的优缺点

Vite 的快,主要体现在两个方面: 快速的冷启动和快速的热更新。而 Vite 之所以能有如此优秀的表现,完全归功于 Vite 借助了浏览器对 ESM 规范的支持,采取了与 Webpack 完全不同的 unbundle 机制。

  • 快速冷启动:Vite只启动一台静态页面的服务器,不会打包全部项目文件代码,服务器根据客户端的请求加载不同的模块处理,实现按需加载,而我们所熟知的webpack则是,一开始就将整个项目都打包一遍,再开启dev-server,如果项目规模庞大,打包时间必然很长。

  • 打包编译速度:当需要打包到⽣产环境时,vite使⽤传统的rollup进⾏打包,所以,vite的优势是体现在开发阶段,另外,由于vite使⽤的是ES Module,所以代码中不可以使⽤CommonJs;

  • 热模块更新:在HRM热更新⽅⾯,当某个模块内容改变时,让浏览器去重新请求该模块即可,⽽不是像webpack重新将该模块的所有依赖重新编译;

1.vite优点

-unbundle 机制的核心:
模块之间的依赖关系的解析由浏览器实现;
文件的转换由 dev server 的 middlewares 实现并做缓存;
不对源文件做合并捆绑操作;

2.vite缺点

由于 unbundle 机制,首屏期间、懒加载方面需要额外做以下工作:和 Webpack 对比,Vite 把需要在 dev server 启动过程中完成的工作,转移到了 dev server 响应浏览器请求的过程中,不可避免的导致首屏性能下降。不过首屏性能差只发生在 dev server 启动以后第一次加载页面时发生。之后再 reload 页面时,首屏性能会好很多。原因是 dev server 会将之前已经完成转换的内容缓存起来。

不对源文件做合并捆绑操作,导致大量的 http 请求;dev server 运行期间对源文件做 resolve、load、transform、parse 操作;预构建、二次预构建操作也会阻塞首屏请求,直到预构建完成为止。

三、使用Vite创建Vue3项目

1. 创建 vite 的项目

按照顺序执行如下的命令,即可基于vite 创建vue 3.x 的工程化项目:

  1. npm init vite-app 项目名称
  2. cd 项目名称
  3. npm install
  4. npm run dev

2.项目的结构

node_modules 目录用来存放第三方依赖包

public 是公共的静态资源目录

src 是项目的源代码目录(程序员写的所有代码都要放在此目录下)

.gitignore 是 Git 的忽略文件

index.html 是 SPA 单页面应用程序中唯一的HTML 页面

package.json 是项目的包管理配置文件

assets 目录用来存放项目中所有的静态资源文件(css、fonts等)

components 目录用来存放项目中所有的自定义组件

App.vue 是项目的根组件

index.css 是项目的全局样式表文件

main.js 是整个项目的打包入口文件

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

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

相关文章

雷达人体存在感应器成品,静止存在感控方案,雷达触发联动技术应用

随着社会经济的不断发展和科技水平的不断提高,智能感应类产品越来越多的应用到我们生产与生活之中。 小到家里边的感应灯、单位里的自动门,大到安防报警等诸多领域,都能体验到它给我们带来的便利性与安全性。 雷达人体感应器可以精准探测人体…

fs文件系统模块

一、什么是 fs 文件系统模块 fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。 例如: fs.readFile() 方法,用来读取指定文件中的内容 fs.writeFile() 方法,用来…

计算机网络模型、网络传输、封装分用的详细讲解

文章目录 计算机网络前言1. 初始网络2. 网络通信相关知识2.1 TCP/IP五层网络模型2.2 OSI七层模型 3. 网络传输3.1 封装3.2 分用3.3 数据传输的中间过程 计算机网络 前言 在互联网诞生之前,人们通过发电报等方式进行通信,这种方式是非常不稳定的&#x…

读写锁的原理与实现

文章目录 什么是读写锁生产消费模型 VS 读写模型 读写锁的pthread库接口读者&&写者模式 模拟实现读写锁思路1——用两个锁来实现(读者优先)模拟实现 思路2——两个条件变量一个锁(写者优先)模拟实现 可以看看之前写的文章…

d2l Nadaraya-Waston核回归

注意力机制里面的非参数注意力汇聚 目录 1.目标任务 2.数据生成 2.1构造原始数值 3.非参数注意力汇聚 4.对注意力机制的理解 1.目标任务 使用y_train(有噪声),拟合y_truth(没噪声)。给你所有的y_train,构造注意力权重生成拟合曲线。 2.数据生成 n_train 50…

五款高效易用的项目管理软件,提升团队工作效率

项目管理软件是为了协助团队或公司便捷和高效地完成工作任务和管理项目而专门设计的软件工具。有了它,团队成员可以共享资源,跟踪项目进度和成果,识别问题并及时解决。与传统的手工方式相比,项目管理软件可以提高工作效率和生产力…

Centos7上安装vscode和ssh

Centos7上安装vscode和ssh 一.前言二.Centos7上安装vscode三,Centos7上配ssh3.1 查看是否安装ssh环境3.2 配置ssh配置文件3.3 启动ssh服务 一.前言 在用linux环境编译项目的时候,比较习惯用ubuntu环境,而对centos环境的一些命令工具使用的比…

外链是什么意思,什么是外链

外链就是指在别的网站导入自己网站的链接。导入链接对于网站优化来说是非常重要的一个过程。导入链接的质量间接影响了我们的网站在搜索引擎中的权重。外链是互联网的血液,是链接的一种。没有链接的话,信息就是孤立的,结果就是我们什么都看不…

计算机网络笔记(方老师408课程)(持续更新)

文章目录 前言互联网概述互联网发展的三个阶段互联网标准化机构 互联网的组成边缘部分的通信方式核心部分的交换方式 我国计算机网络的发展计算机网络的类别计算机网络的性能速率、带宽、吞吐量时延时延带宽积往返时间RTT(Round-Trip Time)利用率非性能特…

SpringCloud分布式配置中心——Config

Config 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 由于微服务越来越多,项目越来越庞大,每一个项目都至少有两三个不同环境的application.properties文件,不易管理,假设我们数据库迁移&#xff…

笔记--java sort() 方法排序

背景 最近在刷一道算法题 《字符串重新排序》时,发现自己有思路但是写代码的时候就无从下手了 而且看了答案之后还没看懂 关键就是基础不好 对于排序没有理解(虽然我学过常用的排序算法 但是都是理念 实践少) 目的 从实践和原理出发 重点是从…

参数处理、查询语句

一、Mybatis参数处理 1、数据准备 pojo类: public class Student {private Long id;private String name;private Integer age;private Double height;private Character sex;private Date birth;// constructor// setter and getter// toString }2、单个简单类型…

设计模式 -- 命令模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

线性表详解

目录 1.线性表的定义和特点 2.案例 2.1一元多项式的计算 可以通过下面这个题目简单练习一下 2.2稀疏多项式的计算 2.3图书信息管理系统 3.线性表的类型定义 4.线性表的顺序表示和实现 4.1线性表的顺序储存表示 4.2顺序表中基本操作的实现 5.线性表的链式表现和实现 …

vba:inputbox

inputbox函数与方法 1.区别一:外观区别 InputBox 函数 在一对话框来中显示提示,等待用户输入正文或按下按钮,并返回包含文本框内容的 String。 Application.InputBox 方法 显示一个接收用户输入的对话框。返回此对话框中输入的信息。 -----…

分享一个国内使用的ChatGPT的方法

介绍 ChatGPT ChatGPT是一种基于自然语言处理技术的对话生成模型。它是由OpenAI公司开发的一种语言模型,可以在大规模语料库上进行无监督学习,并生成高质量的自然语言文本。ChatGPT可以用于多种应用场景,例如智能客服、语音助手、聊天机器人…

JAVA学习笔记(注解)

1. JDK预定义注解 (1) Deprecated(表示标记对象已过时) (2) SuppressWarnings("all") (忽略标记对象的警告) 2. 元注解(用于描述注解的注解) Target 描述注解所生效的位置 Retention 描述注…

SpringBooot

目录 一、简介 1、使用原因 2、JavaConfig (1)Configuration注解 (2)Bean注解 (3)ImportResource注解 (4)PropertyResource注解 (5)案例 3、简介 4…

Faster-RCNN代码解读8:代码调试与总结

Faster-RCNN代码解读8:代码调试与总结 前言 ​ 因为最近打算尝试一下Faster-RCNN的复现,不要多想,我还没有厉害到可以一个人复现所有代码。所以,是参考别人的代码,进行自己的解读。 ​ 代码来自于B站的UP主&#xff0…

网络协议-前端重点——DNS和CDN

目录 DNS的基础知识 统一资源定位符(URL)(网址) DNS(Dimain Name System)(域名系统) DNS Query过程 DNS记录 A记录 AAAA记录 CNAME记录(Canonical Name Record) MX记录&#…