从0到1深入理解vite

news2024/11/13 16:33:44

一、什么是构建工具

  1. ts:如果遇到ts文件,我们需要使用tsc把ts转换为js
  2. react/vue : 安装react-compiler、vue-conplier 将我们写的jsx或者vue文件转换成render函数
  3. less/sass/postcss/somponent-style:我们又需要less-loader、sass-loader等一系列编译工具
  4. 语法降级:babel—>将es的新语法转换成旧版浏览器可以接受的语法
  5. 体积优化:uglifyjs—>将代码进行压缩变成体积更小性能更高的文件

每次稍微改一点点东西,就会非常麻烦
我们需要把App.tsx通过tsc转换为App.jsx,再通过React-complier转换为js文件

有一个东西能够帮我们把tsc,react-complier,less,babel,uglifyjs全部集成到一起,我们只需要关心我们写的代码,如果代码一变化,就会全部把上述流程全部走一遍,这个东西就是构建工具

一个构建工具到底承担了哪些?

  1. 模块化开发支持:支持直接从node_modules中引入代码以及多种模块化支持
  2. 处理代码兼容性:比如babel语法降级、less、ts语法转换(不是构建工具做的,而是构建工具将这些语法对应的处理工具集成进来自动化处理)
  3. 提高项目性能 :压缩文件,代码分割
  4. 优化开发体验:
    • 构建工具会自动监听文件的变化,当文件变化会自动调用对应的集成工具进行重新打包,然后在浏览器重新运行,整个过程叫做热更新
    • 开发服务器:跨越问题,用react-cli,create-react-element、vue-cli 解决跨域问题

每次改一点,都需要走一遍这个构建的流程,顺序还不能错

构建工具就是为了让我们不用关心代码在浏览器如何运行,我们只需要首次给构建工具提供一个配置文件(这个配置文件也不是必须的,他会有默认的),有个这个集成的配置文件之后,我们就可以在下次需要更新的时候调用一次对应的命令就好了,如果我们再结合热更新,我们就不用关心生产的代码也不用关心代码如何在浏览器如何运行,只需要关心我们怎么写就行

市面上主流的构建工具

webpack
vite
parcel
esbuild
rollup
grunt
gulp

二、vite相较于webpack的优势

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

如果我们的项目越大,webpack所要处理的js代码就越多,跟webpack的构建过程有关,造成需要很长时间才能启动开发服务器

webpack支持多种模块化:工程不止跑在浏览器端
在这里插入图片描述

他一开始必须要统一模块化代码,所以意味着他需要将所有的依赖全部读一遍

vite是基于esmodule的,不能写commonjs代码,就不需要讲所有的依赖都读一遍,就以为不需要很长的时间启动开发服务器

根据下图:webpack先从入口开始把所有的模块构建在开启开发服务器,而vite是先开启服务器,从入口只加载当前路由的模块,按需加载,所以很快
在这里插入图片描述

三、vite启动项目初体验

yarn create vite

  • 会帮我们全局安装一个create-vite(vite脚手架)
  • 会直接运行create-vite bin目录下的一个执行配置

很多人会误区 认为官网中使用yarn create构建项目的过程是vite在做的事情,create-vite只是一个脚手架

create-vitevite的关系是什么?

create-vite内置了vite
就像是使用vue-cli也会内置webpack

预设

我们自己搭建一个项目,需要下载vite、vue、post-scc、less、babel等,而create-vite/vue-cli会帮我们集成好这些东西,这个就叫预设

四、vite依赖预构建

在默认情况下,esmodule导入资源的时候要么是绝对路径,要么是相对路径,既然我们现在的最佳实践是node_modules,为什么在es官方在我们导入非绝对路径和非相对路径资源的时候不帮我们搜寻node_modules呢?

原因就是太消耗性能了,在浏览器端,我们想要获取资源,都是通过http请求去加载资源,而一个资源往往也要引用好多个资源,这样一次就需要加载成千上万个资源,如果每个引入的资源都需要去加载,那么就会非常消耗性能

在这里插入图片描述
在这里插入图片描述

那么vite是怎么处理能够获取到这种非绝对路径或者相对路径的资源呢?

官网回答:https://cn.vitejs.dev/guide/features#npm-dependency-resolving-and-pre-bundling

vite在处理过程中如果遇到了非绝对路径或者相对路径的引用,则会尝试开启路径补全,比如我们引入import { cloneDeep } from "lodash";,会修改成如下图
在这里插入图片描述
找寻依赖的过程中,是自当前目录依次向上查找的过程,直到搜寻到根目录或者搜寻到对应依赖为止

而为何会把路径补齐成上图这样?

这是因为我们在导入第三方的包的时候,并不确定第三方包是以何种形式导出的,有的是commonjs(axios)规范导出,有的是esmodule规范导出,所以vite在导入这些第三方包的时候,就需要统一处理,vite会找到对应的依赖,然后用esbuild(对js语法进行处理的一个库),将其他规范的代码转换成esmodule规范的代码,然后放到当前目录下的node_modules/.vite/deps文件夹中,同时对

在这里插入图片描述

依赖预构建解决了什么问题

  1. 不同的第三方包会有不同的导出格式(这个是vite没法约束的事情),导入时统一格式
  2. 对路径的处理上可以直接使用.vite/deps,方便路径重写
  3. 网络多包传输的性能问题
    假设loadsh又依赖了很多其他的模块,并且这些模块都是用export导出,
    开发环境中,每次依赖预构建所重新构建的相对路径都是正确的
    生产环境中vite会全权交给rollup去完成生产环境的打包

vite的基本安装和使用

vite的编译结果

vite的编译结果分析

vite的配置文件

vite中处理css,静态资源怎么去做

vite的插件以及常用插件的使用

vite与ts的结合

vite构建react项目,svelte项目,vue3项目

vite的构建原理

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

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

相关文章

锡废水的废水处理回收

锡废水的废水处理回收是一个综合性的环保过程,旨在从含有锡的废水中提取并回收锡资源,同时减少废水对环境的污染。以下是对锡废水处理回收的详细分析: 一、处理回收意义 锡是一种重要的金属资源,广泛应用于电子、化工、建筑等多个…

HTB-Funnel(ssh端口转发与Hydra爆破)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Funnel靶机 渗透过程 信息搜集 服务器开放了21FTP端口,22SSH端口,通过sC脚本检测,发现存在匿名登录 FTP匿名登录 发现两个文件尝试下载:password_policy.pdf welcome_28112022…

数据漂移分类——稚嫩版

概念漂移虚拟概念漂移 虚拟概念漂移中分类边界不变的原因是,把分类边界归为网站特征所有,理解为是有网站流量特有的特征构建出来的,但是实际上并不是,网络等因素导致的流量变化也是最终分类边界形成的影响之一,所以我认…

Spring Boot:医护人员排班系统开发的技术选择

5系统详细实现 5.1 医护类型管理 医护人员排班系统的系统管理员可以对医护类型添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 医护类型管理界面 5.2 排班类型管理 管理员可以对排班类型进行添加修改删除操作。具体界面如图5.2所示。 图5.2 排班类型界面 5.…

Xinstall助力应用运营,注册参数获取更高效!

随着移动互联网的迅猛发展,应用推广已成为各大企业营销的重要一环。然而,在应用推广过程中,如何准确获取用户的注册参数,一直是困扰推广者的难题。今天,我们就来聊聊Xinstall这一神器,看看它如何助力应用轻…

低代码平台中的统一认证与单点登录(SSO):实现简化与安全的用户管理

引言 在现代应用开发中,用户管理是一个关键环节。随着应用数量的增加,传统的用户认证和管理方式逐渐显得繁琐且不够高效。低代码平台的出现为解决这一问题提供了新的思路。本文将探讨低代码平台中如何实现统一认证与单点登录(SSO&#xff09…

ElementPlusError: [ElForm] unexpected width NaN 解决方法

我自己在使用 Vue 和 ElementPlus 开发项目时,当切换到某些页面时,控制台会出现如下错误: 经过分析,问题原因如下: • el-form 组件设置了 label-width“auto”,并且该组件处于隐藏状态(例如被…

超全分享!这些好用的人力系统不允许还有人不知道!

今天将盘点六款值得推荐的人力系统,为企业选型提供参考! 人力系统就如同企业人力资源管理的智慧中枢,能把企业的人才管理得科学高效。 对于企业来说,如果没有一款好用的人力系统,就像航海者失去了罗盘。有了它首先能精…

18:HAL--DMA

一:DMA DMA的基本定义: DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个…

猫咪浮毛引起呼吸问题?希喂、小米、有哈宠物空气净化器性能对比

相信每个铲屎官都会碰到猫咪掉毛的问题,掉落堆积的猫毛除了带来的清扫负担,还存在着极大的健康隐患。毛发主要分为两种,大颗粒的猫毛可以被我们肉眼所看见,通常会沉在地面上、床上。这类猫毛我们可以用粘毛器、吸尘器等工具进行清…

反向沙箱-安全上网解决方案

随着信息化的发展,企业日常办公越来越依赖互联网。终端以及普通PC终端在访问互联网过程中,会遇到各种各样不容忽视的风险,例如员工主动故意的数据泄漏,后台应用程序偷偷向外部发信息,木马间谍软件的外联,以…

录屏时摄像头无法识别?如何录屏时打开摄像头,解决方案及录屏软件推荐

在数字时代,无论是游戏玩家、在线教育者还是企业培训师,录屏软件都已成为日常工作和娱乐中不可或缺的工具。但有时候想录制人物摄像头画面的时候,当录屏软件无法识别到摄像头时,这无疑会给用户带来不小的困扰。本文将提供一系列解…

ts格式转mp4,四款亲测好用软件推荐!

在这个数字视频时代,我们经常会遇到各种视频格式兼容性问题,尤其是从网络下载的高清电影或电视剧集,很多时候都是以TS格式存储。然而,当我们想要在移动设备、社交媒体或视频编辑软件中播放、上传时,MP4格式因其广泛的兼…

SEO之网站结构优化(十五-CMS系统)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客:阿幸SEO~探索搜索排名之道 15、CMS系统 现在的网站绝…

2024 年高教社杯全国大学生数学建模竞赛题目-C 题 农作物的种植策略

根据乡村的实际情况,充分利用有限的耕地资源,因地制宜,发展有机种植产业,对乡村经济 的可持续发展具有重要的现实意义。选择适宜的农作物,优化种植策略,有利于方便田间管理,提 高生产效益&#…

python-第三方库-[yarl、yaml]

python-第三方库-[yarl、yaml] 一: yarl1> yarl 介绍2> yarl.URL 介绍1. yarl.URL 的语法格式2. yarl.URL demo3. yarl.URL.build()4. yarl.URL().with_*()5. yarl.URL().update_query()6> url / &%组合 二:yaml1> yaml 介绍2> yaml 基本规则1. …

智能客服的四大优势,提升企业服务效率

在这个信息化快速发展的时代,客户服务的重要性越来越凸显。传统的客服方式已经无法满足企业日益增长的服务需求,于是智能客服服务应运而生。智能客服服务不仅改变了企业与客户的互动方式,还提高了服务效率和客户满意度。本文将深入探讨智能客…

La-Z-Boy 标签制作注意事项

在制作标签之前,供应商需要通过EDI向La-Z-Boy发送提前发货通知(ASN)。ASN中的每个明细行将会至少对应一个运输编号(shipment ID),这个信息将会被体现在运输标签上,和标签上的条形码一起&#xf…

log4j漏洞原理以及复现

kali:192.168.222.165 本机:192.168.225.18 原理 Log4j为了输出日志时能输出任意位置的Java对象,引入了Lookup接口,这个Lookup接口可以看作是JNDI的一种实现,允许按照具体的名称逻辑查找对象的位置,并输出对象的内容…

使用nssm将fastapi做成服务解决cmd使用命令启动卡顿问题

下载nssm 点击下载 我使用的是64位的操作系统所以选择64位win64 点击进去在地址栏里面输入cmd回车 输入 nssm.exe install "想要做成的服务名称" "python路径精确到python.exe" "程序路径要绝对路径"然后就做出了服务并且启动 可以在服务管…