更高效的构建工具-vite

news2024/12/29 13:28:38

更高效的构建工具-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.coloradmin.cn/o/1463383.html

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

相关文章

百度智能云分布式数据库 GaiaDB-X 与龙芯平台完成兼容认证

近日,百度智能云的分布式关系型数据库软件 V3.0 与龙芯中科技术股份有限公司的龙芯 3C5000L/3C5000 处理器平台完成兼容性测试,功能与稳定性良好,获得了龙架构兼容互认证证书。 龙芯系列处理器 通用 CPU 处理器是信息产业的基础部件&#xf…

Mac远程连接Windows 11

1. Windows配置 1.1 打开远程连接权限 打开“控制面板”搜索“远程”,选择“允许远程访问你的计算机”这一项。 1.2 添加远程连接用户 打开“计算机管理”,并在用户下新增“新用户”,share是我自己使用的名字,这个名字不固定随…

CSP-J 2023 T3 一元二次方程

文章目录 题目题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题目传送门题解思路总代码 提交结果尾声 题目 题目背景 众所周知,对一元二次方程 a x 2 b x c 0 , ( a ≠ 0 ) ax ^ 2 bx c 0, (a \neq 0) ax2bxc0,(a0),可…

关于dxf文件中,多段线凸度的计算

1.前言 在前面的CAD中的dxf文件解析(二)中讲到了一些CAD的dxf文件解析点、线、圆弧、圆、块等的思路。下面提供链接: (二): CAD中的dxf文件解析(二):dxflib的使用_不爱学习 未完待续的博客-CSDN博客_dxflib (一):CAD中的dxf文件解析(一):准备…

2024.2.22 C++QT 作业

思维导图 练习题 1>完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面。如果账…

如何将 .NET Aspire 应用程序部署到 Azure Container App

作者:Jiachen Jiang 排版:Alan Wang 最近发布的用于构建云原生应用程序的 .NET Aspire 与 Azure Container App(ACA)非常匹配。.NET Aspire 旨在轻松管理由一系列相互依赖的微服务组成的应用程序。Azure Container App 专为微服务…

Linux-时间接口-005

学习重点: 1.函数接口 2.【ls-l】命令的实现1【time】 1.1函数原型 【time_t time(time_t *tloc);】1.2函数功能 返回1970-1-1到现在的秒数(格林威治时间)1.3函数参数 1.3.1【tloc】 存放秒数空间首地址 存放的秒数:如果【t…

MySQL 窗口函数温故知新

本文用于复习数据库窗口函数,希望能够温故知新,也希望读到这篇文章的有所收获。 本文以:MySQL为例 参考文档: https://www.begtut.com/mysql/mysql-window-functions.html 使用的样例数据:https://www.begtut.com/m…

提高效率、降低成本:外贸企业必备好用ERP软件盘点

好用的外贸ERP软件有哪些?本期为您盘点的外贸ERP软件有:Zoho Books,孚盟M8,富通天下,睿贝软件。 外贸ERP系统是什么 企业资源规划(ERP)系统是一种先进的管理软件,尤其是在外贸和国际…

如何使用Docker部署开源Leanote蚂蚁笔记并发布个人博客至公网

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. 安装Docker2. Docker本地部署Leanote蚂蚁笔记3. 安装…

通过eeprom验证FPGA实现的单字节/页读写IIC接口时序

1、概括 前文设计基于FPGA的IIC接口模块,本文将使用eeprom来验证该模块的设计。为了便于查看读写波形,采用两个按键来控制对eeprom数据的读写,当按键0按下后,FPGA向eeprom的前64个存储地址写入地址对应的数据,当按键1按…

文件上传漏洞--Upload-labs--Pass20--数组绕过

一、漏洞原理 漏洞来源:count()函数漏洞。 现自定义一个数组 arr[],定义arr[0]1,arr[3]2, 此时count(arr)的值为2,则arr[count[arr]]即为arr[2],但是arr[2]未定义,即为一个空值,若使用count()函数的本意是…

大数据计算技术秘史(上篇)

在之前的文章《2024 年,一个大数据从业者决定……》《存储技术背后的那些事儿》中,我们粗略地回顾了大数据领域的存储技术。在解决了「数据怎么存」之后,下一步就是解决「数据怎么用」的问题。 其实在大数据技术兴起之前,对于用户…

【TCP/IP】组播

一、组播介绍 组播(Multicast)是网络技术中数据传输的一种方法,它允许将数据包同时发送给一组指定的目标,而不是单个的目标(单播 Unicast)或所有可能的目标(广播 Broadcast)。组播传…

Python的自定义函数

Python的自定义函数 自定义函数的作用匿名函数语法示例 自定义函数语法示例 自定义函数的作用 定制化需求降低代码重复编写 匿名函数 匿名函数,可以用lambda关键字定义。通过lambda构造的函数可以没有名称,即在自定义匿名函数时,所有代码可…

【智能家居】7、主程序编写+实现语音、网络和串口功能

需要毕业论文私信有偿获取 截止目前mainPro.c代码 #include <stdio.h> #include <string.h>#include "controlDevices.h" #include "inputCmd.h"struct Devices *findDevicesName(char *name,struct Devices *phead){struct Devices *tmp=ph…

得物面试:Kafka消息0丢失,如何实现?

得物面试&#xff1a;Kafka消息0丢失&#xff0c;如何实现&#xff1f; 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面…

更改WordPress作者存档链接author和Slug插件Edit Author Slug

WordPress默认所有用户的存档永久链接都是/author/username/&#xff0c;不管是管理员还是订阅者或贡献者或作者或编辑。如果你想要自定义用户存档链接&#xff0c;比如根据角色不同使用不一样的author&#xff0c;或者自定义作者链接中的用户名Slug&#xff0c;那么建议考虑使…

Win32 获取EXE/DLL文件版本信息

CFileVersion.h #pragma once#include <windows.h> #include <string> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 版本号辅助类 class CVersionNumber { public:// 无参构造CVersionN…

uniapp实现全局悬浮框

uniapp实现全局悬浮框(按钮,页面,图片自行设置) 可拖动 话不多说直接上干货 1,在components新建组件(省去了每个页面都要引用组件的麻烦) 2,实现代码 <template><view class"call-plate" :style"top: top px;left: left px;" touchmove&quo…