Vite详解

简介: Vite详解

前言


构建工具 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 是整个项目的打包入口文件


相关文章
|
Java 数据库连接 应用服务中间件
【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承
在Maven中,依赖范围(Dependency Scope)用于控制依赖项在编译、测试和运行时的可见性和可用性。通过指定适当的依赖范围,可以在不同的构建和执行环境中控制依赖项的加载和使用。
2049 1
|
4月前
|
运维 API 数据库
哪个IP查询工具更新更及时?实测对比:日更库 vs周更/月更库
IP归属地动态变化,周/月更库易过时,导致广告错投、风控失效。本文实测对比发现:日更商业库新IP段24小时内精准入库,而月更纯真库等严重滞后。附三大验证方法——跟踪新IP段、多工具交叉比对、WHOIS事实核查。(239字)
1064 1
|
传感器 人工智能 机器人
水下无人机:深海探索的未来工具
【10月更文挑战第6天】水下无人机作为深海探索的未来工具,正不断突破技术瓶颈,拓宽人类对深海的认知边界。它们在深海科学研究、资源勘探、军事应用以及环境保护中展现出了巨大的潜力和价值。随着技术的不断进步和应用的不断拓展,水下无人机将迎来更加广阔的发展空间,为人类探索和保护海洋提供强有力的技术支持。
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
1132 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
传感器 人工智能 安全
详述Agent智能体含义
智能体(Agent)技术正推动人工智能从被动响应迈向主动决策。它具备自主性、反应性、主动性和社交能力,能感知环境、规划任务、调用工具、学习经验,实现复杂目标。从个人助理到科研加速,从软件开发到自动驾驶,智能体已在多个领域落地。然而,其可靠性、长程规划、安全伦理及认知局限仍是待解难题。未来,智能体将作为人类智能延伸,助力我们聚焦创造与战略,开启人机协同新篇章。
2782 7
|
Java 数据库 关系型数据库
优秀的代码都是如何分层的?
好的应用分层应该做到1.方便后续代码进行维护扩展;2.分层的效果需要让整个团队都接受;3.各个层职责边界清晰。本文针对controller,service, mapper三个维度的应用分层进行整理,以优化后续代码的维护
10970 0
|
算法 Java UED
你的Spring Boot应用是否足够健壮?揭秘限流功能的实现秘诀
【8月更文挑战第29天】限流是保障服务稳定性的关键策略,通过限制单位时间内的请求数量防止服务过载。本文基于理论介绍,结合Spring Boot应用实例,展示了使用`@RateLimiter`注解和集成`Resilience4j`库实现限流的方法。无论采用哪种方式,都能有效控制请求速率,增强应用的健壮性和用户体验。通过这些示例,读者可以灵活选择适合自身需求的限流方案。
845 2
|
网络安全 安全 Java
Java一分钟之-SSL/TLS:安全套接字层与传输层安全
【6月更文挑战第2天】本文介绍了SSL/TLS协议在保护数据传输中的作用,以及Java中使用JSSE实现SSL/TLS的基础。内容涵盖SSL/TLS工作流程、版本、常见问题及解决办法。通过`SSLSocket`和`SSLServerSocket`示例展示了服务器和客户端的实现,并强调证书管理、配置检查和依赖更新的最佳实践,以确保安全的通信。
1830 4
|
消息中间件 安全 Kafka
Kafka支持SSL/TLS协议技术深度解析
SSL(Secure Socket Layer,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。这些协议在传输层对网络连接进行加密,确保数据在传输过程中不被窃取或篡改。
1478 0

热门文章

最新文章