更高效的构建工具-vite

更高效的构建工具-vite

  • 前言
  • Vite是什么
  • Vite和webpack的比较
    • 1. 运行原理
    • 2. 使用成本
  • Vite的初体验

前言

首先我们要认识什么时构建工具?

企业级项目都具备什么功能呢?

  • Typescript:如果遇到ts文件,我们需要使用tsc将typescript代码转化为js代码;
  • React/Vue:如果使用前端框架需要安装react-complier / vue-complier,将我们的jsx文件/vue文件转换为render函数
  • less/sass/postcss/component-style:如果使用这些css预处理器,需要安装less-loadersass-loader等一系列编译工具;
  • 语法降级:Babel -->可能有部分浏览器还不支持新语法,所有我们还需将es的新语法转换到旧版本浏览器可以识别的语法格式;
  • 体积优化:uglifyjs / Terser --> 可以将我们的代码压缩成体积更小性能更高的文件;

如果我们稍微需要修改一些东西,都需要这么多东西的构建,非常麻烦~

现在有一个工具可以把tsc,vue-complier,less-loader,babel,terser等等都集成到一起,当代码更改时会自动将这些全部启动运行一遍。非常之轻松,这就是构建工具!!!

除了这些功能,一个构建工具还集成了:

  • 模块化开发支持:可以直接从node_modules引入代码;
  • 提高项目性能:压缩文件,代码分割;
  • 优化开发体验:
    • 会自动监听文件的变化,自动帮你调用所需要的处理工具并且进行重新打包( 整个过程叫做热更新(HRM)
    • 开发服务器:帮助我们解决跨域问题;为什么叫开发服务器呢? 因为服务器与服务器之间时不存在跨域问题的,所以本质上就是创建一个服务器帮助你去访问你访问不到的服务器;

Vite是什么

vite开发环境依赖esbuild进行预构建,生产环境则依赖rollup进行打包,并且充分利用了现代浏览器的特性,它是站在众多巨人肩膀上的一个产物,一个非常棒的前端项目的构建工具。vue-cli中已经将vite作为预设构建工具,如果我们使用vue-cli进行创建项目时,vue.config.js不再将时webpack的配置而是vite的配置。

Vite和webpack的比较

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

他们两种构建工具的侧重点不同,webpack更多的是关注兼容性,vite是更侧重于浏览器端的开发体验~

1. 运行原理

  • webpack
    在这里插入图片描述

当我们使用webpack启动项目时,webpack会根据我们配置文件(webpack.config.js) 中的入口文件(entry),分析出项目项目所有依赖关系,然后打包成一个文件(bundle.js),交给浏览器去加载渲染。项目越大,运行时间越长。

  • vite
    在这里插入图片描述
    使用vite运行项目时,首先会用esbuild进行预构建,将所有模块转换为es module,不需要对我们整个项目进行编译打包,而是在浏览器需要加载某个模块时,拦截浏览器发出的请求,根据请求进行按需编译,然后返回给浏览器。

2. 使用成本

  • webpack
    如果我们使用webpack自己去搭建项目脚手架时,需要配置比较多的东西, 比如:跨域、代码压缩、代码分割、css预处理器的代码转换、样式兼容性、vue/react代码解析、图片压缩、代码热更新、es降级、ts转换等等。

  • vite
    vite对我们常用功能都做了内置,比如:css 预处理器、html 预处理器、hash 命名、异步加载、分包、压缩、HMR等等,我们可以很轻松的通过配置项去配置。降低了我们的学习成本、增加了开发体验。

Vite的初体验

vite需要node.js版本18+,20+,请注意升级你的node版本

//使用 NPM:
$ npm create vite@latest//使用 Yarn:
$ yarn create vite//使用 PNPM:
$ pnpm create vite

这里需要输入项目名称,选择需要构建的框架以及需要使用的语言。

在这里插入图片描述
最后运行这上图的三条命令,构建速度也是非常的快~

在这里插入图片描述
创建成功的效果图如下图:

在这里插入图片描述



到这里vite的初步讲解就算结束了,创作不易,感谢支持!❤️❤️❤️

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac Jmeter下载安装启动(1)

目录 Jmeter下载安装启动下载启动 Jmeter下载安装启动 注意⚠️:使用jmeter需要有java环境 下载 官网下载地址:https://jmeter.apache.org/ 会看到这里有两个版本,那么有什么区别么? Binaries是可执行版,直接下载解…

【开源】SpringBoot框架开发康复中心管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

新书推荐:《分布式商业生态战略:未来数字商业新逻辑与企业数字化转型新策略》

近两年,商业经济环境的不确定性越来越明显,市场经济受到疫情、技术、政策等多方因素影响越来越难以预测,黑天鹅事件时有发生。在国内外经济方面,国际的地缘政治对商业经济产生着重大的影响,例如供应链中断,…

发布订阅模式:观察者模式的一种变体

发布-订阅模型(Publish-Subscribe Model)的底层机制通常基于观察者模式。 发布-订阅模型是观察者模式的一种变体。 在观察者模式中,主题(或被观察者)维护了一组观察者,当主题的状态发生变化时&#xff0c…

【监控】Spring Boot+Prometheus+Grafana实现可视化监控

目录 1.概述 2.spring actuator 3.Prometheus 3.1.介绍 3.2.使用 1.client端的配置 2.server端的配置 4.grafana 5.留个尾巴 1.概述 本文是博主JAVA监控技术系列的第四篇,前面已经聊过了JMX、Spring actuator等技术,本文我们就将依托于Spring …

如何在Mac上启用蓝牙,这里提供几个方法

序言 要将蓝牙配件与Mac配对,首先,你需要在Mac上启用蓝牙。现在有不同的方法可以在Mac上关闭/打开蓝牙,因为苹果macOS集成了Siri。我们将讨论在不使用鼠标的情况下打开蓝牙。为此,激活Siri并要求它打开蓝牙,它将自动启…

PowerDesigner 安装

PowerDesigner 安装汉化破解使用过程 - 沦陷 - 博客园 (cnblogs.com)https://www.cnblogs.com/huangting/p/12654057.html

体验浏览器公司出品的浏览器

朋友,你现在是不是正在使用浏览器看这篇文章? 当然,这篇文章我也是在浏览器中完成的,使用的浏览器就是有叫浏览器公司出品的浏览器。 出品公司:The Browser Company 产品名: Arc Search 下载地址&#xf…

机器学习 day39(决策树和神经网络的比较)

单个决策树、决策树集合的优缺点 适用于表格数据(结构化数据)。例如在房屋预测中,我们有房屋大小、卧室数量、楼层数量、房屋年龄等数据,这些数据可以存储在表格中,不论是连续的还是离散的都可以不适用于非结构化数据…

springboot班级综合测评管理系统源码和论文

随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要互联网…

mysql优化指南之原理篇

之前碰到一个线上问题,在接手一个同事的项目后,因为工期比较赶,我还没来得及了解业务背景和大致实现,只是了解了上线发布的顺序和验证方式就进行了上线,在上线进行金丝雀的时候系统还没发生什么异常,于是我…

【webrtc】m77 PacedSender

mediasoup是m77的代码,m77的代码并没有paced controller ,而且与paced sender 的逻辑混在了一起。结合大神们的代码分析,对照m77 进行 理解。m77 有ProbeController。给pacersender 更新飞行数据:PacedSender::InsertPacket(size_t bytes) 对应的是 PacingController::OnPa…