前端构建工具vite与webpack详解

文章目录

  • 前言
    • 什么是构建工具
      • 先说说企业级项目里都需要具备哪些功能?
        • 这是代码改动后需要做的事情样例
        • 总结
  • 一、构建工具他到底承担了哪些脏活累活?
  • 二、vite相较于webpack的优势
  • 三、 vite会不会取代webpack
  • 四、 你必须要理解的vite脚手架和vite
      • create-vite和vite的关系是什么呢?


前言

请添加图片描述

什么是构建工具

常识:浏览器它只认识html,css,js

先说说企业级项目里都需要具备哪些功能?

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

没有构建工具之前,我们只要稍微改一点点代码,就会非常麻烦,以上插件或者模块都要重新去运行一次

这是代码改动后需要做的事情样例

App.tsx —> tsc —> App.jsx —> React-complier —> js文件

总结

构建工具能够帮你把tsc,react-compiler,less,babel,uglifyjs全部集成到一起,我们只需要关心我们写的代码就好了。我们写的代码只要变化 —>构建工具帮我们自动去tsc,react-compiler,less,babel,uglifyjs全部挨个走一遍 —>js文件。


一、构建工具他到底承担了哪些脏活累活?

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

构建工具他让我们可以不用每次都关心我们的代码在浏览器如何运行

构建工具他让我们可以不用每次都关心我们的代码在浏览器如何运行,我们只需要首次给构建工具提供一个配置文件(这个配置文件也不是必须的,如果你不给他 他会有默认的帮你去处理),有了这个集成的配置文件以后,我们就可以在下次需要更新的时侯调用一次对应的命令就好了,如果我们再结合热更新,我们就更加不需要管任何东西,这就是构建工具去做的东西,他让我们不用关心生产的代码也不用关心代码如何在浏览器运行,只需要关心我们的开发怎么写的爽怎么写就好了


二、vite相较于webpack的优势

请添加图片描述

官方文档: https://cn.vitejs.dev/guide/why.html#the-problems

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

  • 起因:我们的项目越大 ---->构建工具( webpack )所要处理的Js代码就越多,这跟webpack的构建过程(工作流程)有关系。

  • 造成的结果:构逸工具需要很长时间才能启动开发服务器(启动开发服务器 -->把项目跑起来)

请添加图片描述

因为webpack支持多种模块化,他一开始必须要统一模块化代码,所以意味着他需要将所有的依赖全部读一遍 。


三、 vite会不会取代webpack

vite是基于es modules的,二者侧重点不一样

  • webpack更多的是关注兼容性,支持多种模块化
  • vite关注浏览器端的开发体验,只支持ES模块化

四、 你必须要理解的vite脚手架和vite

请添加图片描述

vite官网文档教程: https://vitejs.dev/guide/#scaffolding-your-first-vite-project

//比如我们敲了以下命令
yarn create vite

它帮我们全局安装:create-vite (vite的脚手架),直接运行这个create-vite bin目录的下的一个执行配置文件。
我们之前接触过vue-cli,很多人可能就会存在误区:认为官网中使用对应yarn create构建项目的过程也是vite在做的事情

create-vite和vite的关系是什么呢?

create-vite内置了vite 就像vue-cli 内置webpack

vite --> vue团队的 create-vite —> vue团队vue团队希望减少我们的学习成本。

比如: 买房子!
毛坯房(我们的工程) 买沙发,做装修,修各个厕所,埋线,
精装修的房: 搭建好了我们自己搭建一个项目:下载vite,vue,post-css,less,babel等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch卷积神经网络各层介绍与实现

本文将讲解,PyTorch卷积神经网络各层实现与介绍,包括:基本骨架–nn.Module的使用、卷积操作、卷积层、池化层、激活函数、全连接层的介绍。 😜 对于相关原理,可以跳转👉卷积神经网络CNN各层基本知识 &…

Nginx缓存基础

1 nginx缓存的流程 客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求&…

FRC-EP系列--你的汽车数据一站式管家

FRC-EP系列产品主要面向汽车动力总成测试的客户,主要应用方向为残余总线仿真及网关。本文将详细介绍FRC-EP的产品特性和应用场景。 应用场景: 汽车电子生成研发过程中,需要对汽车各个控制器进行仿真测试,典型的测试对象有&#…

原语:串并转换器

串并转换器OSERDESE2 可被Select IO IP核调用。 OSERDESE2允许DDR功能 参考: FPGA原语学习与整理第二弹,OSERDESE2串并转换器 - 知乎 (zhihu.com) 正点原子。 ISERDESE2原语和OSERDESE2原语是串并转换器,他的的功能都是实现串行数据和并行…

基于安卓android微信小程序的物流仓储系统

项目介绍 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个开发过程首先对物流仓储系统进行需求分析,得出物流仓储系统主要功能。接着对物流仓储系统进行总体设计和详细…

Halcon的相机内参外参的标定

halcon标定相机内参只能使用方向标定板和圆点标定板。并且方向标定板可也可用性极高。 1.打开halcon的标定助手,选择标定板的描述文件,填写标定板的厚度,根据相机选择像元的尺寸和镜头的焦距。如果已有相机内参,只标定外参&#…

Project#2: Extendible Hash Index

文章目录 准备Task #1-Read/Write Page GuardsBasicPageGuard/ReadPageGuard/WritePageGuardUpgradeWrappersTests Task #2-Extendible Hash Table PagesHash Table Header Pages**成员变量:****方法实现:** Hash Table Directory Pages**成员变量&#…

什么是Node.js的NVM(Node Version Manager)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【ZYNQ】裸机 PS + PL 双网口实现之 SDK 程序设计

涉及 lwip 库文件及 ZYNQ 配置相关可参考以下文章: 【ZYNQ】裸机 PS PL 双网口实现之 LWIP 库文件修改 【ZYNQ】裸机 PS PL 双网口实现之 ZYNQ 配置 工程配置 启动 SDK ,创建模板工程,配置 BSP。 勾选 lwip141 库。 对 lwip 做如下配置…

Elastic Observability 8.11:ES|QL、APM 中的通用分析和增强的 SLOs

作者:Tom Grabowski, Katrin Freihofner, Israel Ogbole Elastic Observability 8.11 引入了 ES|QL for Observability(技术预览版)、Universal ProfilingTM 和 Elastic APM 集成,以及针对 Elastic Observability 的新 SLO &#…

GD32单片机远程升级下载,手机在线升级下载程序,GD32在线固件下载升级,手机下载程序固件方法

GD32、STM32单片机,是我们最常见的一种MCU。通常我们在使用STM32单片机都会遇到程序在线升级下载的问题。 GD32/STM32单片机的在线下载通常需要以下几种方式完成: 1、使用ST/GD提供的串口下载工具,本地完成固件的升级下载。 2、自行完成系统B…

Ubuntu22.04配置Go环境

Ubuntu上配置Go环境biCentOS简单多了,有两种方案,一种直接使用apt进行安装,一种自己从官网下载安装包进行安装。 1、使用apt直接安装 更新apt安装包,常规操作 apt update 然后看看apt自带的Go版本是多少 apt list golang 是1…

数据结构——二叉树(2)

接上一篇文章http://t.csdnimg.cn/nsKsW,本次我们接着讲解关于二叉树的相关知识。 一、二叉树的相关性质: 1. 若规定根节点的层数为 1 ,则一棵非空二叉树的 第 i 层上最多有 2^(i-1) 个结点. 2. 若规定根节点的层数为 1 ,则 深度…

【QT】QT自定义C++类

在使用Qt的ui设计时,Qt为我们提供了标准的类,但是在很多复杂工程中,标准的类并不能满足所有的需求,这时就需要我们自定义C类。 下面以自定义的QPushButton作一个很简单的例子。 先新建默认Qt Widgets Application项目 一、自定义…

LabVIEW如何才能得到共享变量的引用

LabVIEW如何才能得到共享变量的引用 有一个LabVIEW 库文件 (.lvlib) ,其中有一些定义好的共享变量。但需要得到每个共享变量的引用以便在程序运行时访问其属性。 共享变量的属性定义在“变量”类属性节点中。为了访问变量类,共享变量的引用必须连接到变…

Leetcode543. 二叉树的直径

Every day a Leetcode 题目来源:543. 二叉树的直径 解法1:深度优先搜索 首先我们知道一条路径的长度为该路径经过的节点数减 1,所以求直径(即求路径长度的最大值)等效于求路径经过节点数的最大值减 1。 而任意一条…

linux系统,确认账户密码正确

linux系统,确认账户密码正确 1、问题背景2、解决方法 1、问题背景 有时在linux系统安装软件时,有的软件可能会在安装过程中创建系统用户,同时会给出这个用户的密码。过了一段时间我们不确定这个密码是否还正确,那怎么确认这个密码…

Effective C++ 系列和 C++ Core Guidelines 如何选择?

Effective C 系列和 C Core Guidelines 如何选择? 如果一定要二选一,我会选择C Core Guidelines。因为它是开源的,有300多个贡献者,而且还在不断更新,意味着它归纳总结了最新的C实践经验。最近很多小伙伴找我&#xff…

(自适应移动端)响应式门窗定制pbootcms板 门窗门业网站板下载-带视频功能

(自适应移动端)响应式门窗定制pbootcms模板 门窗门业网站模板下载-带视频功能 PbootCMS内核开发的网站模板,该模板适用于门窗门业网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应移动端,…

【ubuntu】ubuntu系统查看服务命令

查看正在运行的服务 sudo service --status-all [] 代表服务是在启动运行的状态 [-] 代表服务是在关闭停止的状态