vite(一)——基本了解和依赖预构建

news2024/12/23 11:34:32

文章目录

  • 一、什么是构建工具?
    • 1.为什么使用构建工具?
    • 2.构建工具的作用?
    • 3.构建工具怎么用?
  • 二、经典面试题:webpack和vite的区别
    • 1.编译方式不同
    • 2.基础概念不同
    • 3.开发效率不同
    • 4.扩展性不同
    • 5.应用场景不同
    • 6.总结( vite会取代webpack吗?)
  • 三、vite的基本了解
    • 1.vite和vite-cli的区别
    • 2.Rollup 打包代码
      • (1)学习vite了解rollup的原因
      • (2)使用rollup打包 ES 模块的原因
      • (3) ES6 模块与 CommonJS 模块的差异
      • (4) 为什么说vite只支持浏览器原生 ES imports 的局限
    • 3.vite的依赖预构建
      • (1)过程
      • (2)作用
      • (3)构建总结(作用详解)
  • 四、vite配置语法提示
    • 1. 方式一
    • 1. 方式二
  • 五、vite通过环境变量来配置开发、生产环境


一、什么是构建工具?

1.为什么使用构建工具?

因为浏览器只能识别html、css、JavaScript类型的文件,而typescript、vue、less… 等不同文件需要转化为不同文件,在实际开发中稍微改一点东西都需要重新编译,非常麻烦,加上一些文件需要降级为旧版本的浏览器代码(如es6转换为es5),构建打包工具应运而生。

2.构建工具的作用?

(1)模块化的开发(如node_modules文件中引入代码)
(2)处理兼容性的代码(如less、ts语法转换不是构建工具做的,而是构建工具将这些语法对应的程序集成在一起统一处理)
(3)提高项目性能(如打包后将代码压缩,删除空格、压缩图片大小等,因为代码体积越小,传输服务器的请求构建页面越快)
(4)优化开发体验(同vue中的热更新、解决跨域、解决es6降级为es5的语法等)——构建工具可以让我们不用关心在什么地方,干什么,只需要配置相对应的文件就能达到需要的效果。

3.构建工具怎么用?

二、经典面试题:webpack和vite的区别

1、基础概念不同;2、编译方式不同;3、开发效率不同;4、扩展性不同;5、应用场景不同

1.编译方式不同

项目越大,构建工具(webpack)就会运行的越慢,因为webpack是将所有的模块加载完成后启动服务的,而vite是运行一部分就加载一部分。

为什么webpack需要将所有的模块加载完才能启动服务呢?这就涉及到基础概念的问题了。

下图:webpack和vite构建的流程图
在这里插入图片描述

2.基础概念不同

webpack支持多种模块化,它可以把许多不同类型的模块和资源文件打包为静态资源,因此需要一开始就统一代码,意味着在项目运行前就需要将所有的依赖都一边后运行。
vite 基于浏览器原生 ES imports 的开发服务器。

3.开发效率不同

webpack的热更新是全量更新,即使修改一个小文件,也会重新编译整个应用,使得在越大的项目中导致编译速度变慢。
vite的热更新是增量更新,只更新修改的文件,(即允许在运行时动态导入和导出模块)所以即使在大型项目中也能保持极快的编译速度。

4.扩展性不同

webpack自2012年诞生,有着成熟的插件生态,几乎可以实现任何你想要的功能,扩展性以及灵活性非常强。
vite虽然也支持插件,但相较于webpack的生态,还有较长的距离。

5.应用场景不同

webpack由于其丰富的功能和扩展性,适合于大型、复杂的项目。
而vite凭借其轻量和速度,更适合于中小型项目和快速原型开发。

6.总结( vite会取代webpack吗?)

vite和webpack的区别:
1、基础概念不同;
2、编译方式不同;
3、开发效率不同;
4、扩展性不同;
5、应用场景不同。

vite会取代webpack吗?
总的来说,vite即使有着较快的运行速度和编译速度,但只支持浏览器原生 ES imports 的局限性(即是优势,也是劣势,利用ES Module的特性,只对浏览器请求的文件进行实时编译,而不是像Webpack那样对整个项目进行预编译。这大大提高了开发环境的启动速度和热更新速度。),以及远远低于webpack高度的自定义性和成熟的生态,注定无法取代webpack。

三、vite的基本了解

1.vite和vite-cli的区别

举个毛坯房和精装房的区别。
webpack(毛坯)和 vue-cli(精装)
vite(毛坯)和vite-cli(精装)
vite和vite-cli本质上是两个东西,是vue团队为了方便使用,给了一个常用的配置项目给你使用,和vue-cli一样,不用从0开始用webpack构建vue项目一样。yarn create就是vite-cli的使用。但是这里说vite的详细使用,和vite-cli是没有很大关系的,在这里说明一下。
在这里插入图片描述

2.Rollup 打包代码

(1)学习vite了解rollup的原因

vite的官网原话:使用rollup打包你的代码。如果你想了解vite,了解rollup也是必不可少的。
在这里插入图片描述

(2)使用rollup打包 ES 模块的原因

rollup.js 的开发本意,是打造一款简单易用的 ES 模块打包工具,不必配置,直接使用。这一点,它确实做到了。
后来经过不断发展,它也可以打包 CommonJS 模块。但是,这时需要经过复杂配置,实际上并没有比 Webpack 简单多少。
因此建议,只把 rollup.js 用于打包 ES 模块,这样才能充分发挥它的优势。

总结:rollup用来做es模块的打包工具。如果

(3) ES6 模块与 CommonJS 模块的差异

CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段。

①举例:commonJS和ES6导出一个自增函数调用。连续调用两次,commonJS会输出1,ES6输出2。
②CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。

(4) 为什么说vite只支持浏览器原生 ES imports 的局限

上面说了由于vite只支持浏览器原生 ES imports 的局限导致不能取代webpack,以简单的模块导入为例子,在新建项目中,安装loader,在js文件中导入loader, import loader from ‘loader’ ,这里直接在JavaScript中执行会出现 js中不能使用相对路径,需要 / ./ …/ 这样的形式引入的报错。

为什么es module 不去多走这一步呢?
答案:es import导入了loader,会同时导入和loader同级的n个文件。导致消耗过大。服务端由于导入的都是本地缓存文件,没有这个问题。

3.vite的依赖预构建

(1)过程

首先vite会找到对应的依赖,通过esbuild(对js语法处理的一个库)将其他规范的代码转换为esmodeule规范的代码,然后放到当前目录下node_modules/.vite/deps,同时对而是modules规范的各个模块进行统一集成。

(2)作用

1.由于不同的第三方包有不同导出格式。(把所有的库改为esmodules规范导入)
2.对路径的处理可以直接使用 .vite/deps,方便路径重写。
3.解决网络多包传输的性能问题。(也就是原生esmodules导入文件不能用相对路径的原因之一)

(3)构建总结(作用详解)

(1)当你导入了一个模块,然后vite 会进行自动补全功能,在node_modules中找到对应的文件。
(2)同时,由于使用相对路径会导致同时导入与你导入模块相关的n个模块影响性能(也就是esmodules导入不能使用相对路径的原因之一),这里再开发环境中使用绝对路径,再生产环境中用rollupJs打包公构建解决。
(3)之后,由于不同的库导出方式不同(如commonJS、esmodules),你无法约束所有的库导出方式统一,所以,==vite 重写你导出的模块变为函数,也就是在实际开发过程中你导入那个模块,就构建那个模块的情况。==如下面示例。

// 举例
// 1:有个库导出了a模块
export default function a(){}
// 2:index.js 文件中
export { default as a }function./a.js’
// 第2步相当于下面代码(将这个模块导入又导出了)
import a from './a.js'
export const a = a;

// vite 重写
function a(){}

四、vite配置语法提示

1. 方式一

const viteConfig = {
 // 配置
}
export default viteConfig;

1. 方式二

import {defineConfig} from "vite";

export default defineConfig( config:{
 // 配置
})

五、vite通过环境变量来配置开发、生产环境

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

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

相关文章

算法:最小生成树

文章目录 生成树Kruskal算法Prim算法 本篇总结的是最小生成树算法 生成树 连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树就不在连通;反之,在其中引入任何一条新边&…

浅谈USD格式

USD是什么?如何发展起来的? USD(Universal Scene Description)是一种开放的、可扩展的文件格式和数据交换标准,用于描述和交换三维计算机图形场景和资产的数据。它最初由皮克斯动画工作室开发,并于2012年公…

java答题小程序源码带后台

尊敬的客户大家好!接下来由我来介绍一下晟讯答题小程序,晟讯答题小程序是一款专业性的答题小程序,技术方式为前端原生开发的小程序,服务端为java程序,且拥有独立知识产权,软著登字2019SR0657453。其功能集个…

gin使用自签名SSL证书与自签名证书不受信任方法解决

文章目录 1. X.509 V3证书介绍2、使用openssl生成自签名证书和解决不受信任问题2.1、生成根证书2.2、为域名生成证书申请文件2.3、为域名创建证书的扩展描述文件2.4、为域名创建证书 3、Go应用中使用自签名证书3.1、gin框架调用实现3.2、运行效果 4、使用java的bouncycastle生成…

ACM32如何保护算法、协议不被破解或者修改

ACM32具有以下几种功能,可以保护算法、协议不被破解或者修改。 1.存储保护  RDP读保护  WRP写保护  PCROP 专有代码读保护  MPU存储区域权限控制  Secure User Memory存储区域加密 2.密码学算法引擎  AES  HASH  随机数生成  …

DevEco Studio 项目启动工程和Device Manage

DevEco Studio 项目启动工程和Device Manage 鸿蒙(HarmonyOS) 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、创建虚拟机(Device Manage) 鸿蒙IDE创建虚拟设备入口有2个地方&…

C++:this指针

目录 前言 成员函数返回this指向的对象本身时,为什是返回引用类型? 成员函数返回this对象本身时,内部通常会通过拷贝构造函数来创建一个临时对象? 总结 前言 c通过提供特殊的对象指针,this指针 指向被调用的成员函…

模块二——滑动窗口:438.找到字符串中所有字母异位词

文章目录 题目描述算法原理滑动窗口哈希表 代码实现 题目描述 题目链接:438.找到字符串中所有字母异位词 算法原理 滑动窗口哈希表 因为字符串p的异位词的⻓度⼀定与字符串p 的⻓度相同,所以我们可以在字符串s 中构造⼀个⻓度为与字符串p的⻓度相同…

每日好题:原来你也玩三国杀(DP动态规划)

I - 原来你也玩三国杀 Description 小 Q 最近听说 “很多” acmer 都爱上了一款游戏《三国杀》。因为小 Q 是一个初学者,所以想自己先偷偷学习一下,然后惊艳所有人。但又因为小 Q 不屑于使用一般的武将,因为他觉得唯有操作型武将才能显得自…

虾皮选品网:如何使用虾皮选品数据软件提升您的选品策略

在虾皮(Shopee)平台上进行选品时,了解市场趋势、竞争程度和产品潜力是非常重要的。为了帮助卖家更好地分析虾皮市场,并为选品和运营策略提供有力支持,有一些数据软件和工具可以派上用场。本文将介绍一些建议使用的虾皮…

Kafka-集群架构设计

Kafka的Zookeeper元数据梳理 zookeeper整体数据 Kafka将状态信息保存在Zookeeper中,这些状态信息记录了每个Kafka的Broker服务与另外的Broker服务 有什么不同。通过这些差异化的功能,共同体现出集群化的业务能力。这些数据,需要在集群中各个…

DS二分查找_搜索二维矩阵(纯二分查找写法)

本题我写了两个方法,一个是的时间复杂度,就是本文章一个mn时间复杂度,这个比较简单,如果不会二分法可以看这篇文章 Description 使用二分查找法来判断m*n矩阵matrix中是否存在目标值target。 该矩阵有以下特性: 1. 每行中的整数…

智物发布MT6877平台无线AR智能眼镜参考设计,推动下一代无线AR发展

随着增强现实(AR)技术的不断发展,有线AR眼镜在连接和使用方面存在一些限制。为了解决这些问题,无线AR智能眼镜的推出势在必行。 新一代无线AR智能眼镜采用了天玑900(MT6877)平台作为参考设计,搭载了2.4GHz的八核处理器…

【每日一题】用邮票贴满网格图

文章目录 Tag题目来源题目解读解题思路方法一:二维前缀和二维差分 写在最后 Tag 【二维前缀和】【二维差分】【矩阵】【2023-12-14】 题目来源 2132. 用邮票贴满网格图 题目解读 在 01 矩阵中,判断是否可以用给定尺寸的邮票将所有 0 位置都覆盖住&…

飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型

5MW飞轮储能一次调频并网三机九节点系统,虚拟惯性和下垂控制,也可加入虚拟同步机VSG控制,飞轮储能容量可调,系统频率50Hz,离散模型,仿真运行速度快。 飞轮储能变流器采用双PWM环设计,并网电压电…

CleanMyMac2024绿色免费激活码序列号

2024CleanMyMac免费mac下载版是一款简单实用的PC清洁管理工具,电脑刚装完系统的时候运行速度超级快,随着时间的推移,你会发现越来越慢,经常会反应卡顿,越来越多的垃圾文件占用了你的磁盘空间,各种过时的日志…

数据结构学习 12字母迷宫

dfs 回溯 剪枝 这个题和dfs有关,但是我之前没有接触过,我看了这一篇很好的文章,看完之后写的答案。 我觉得很好的总结: dfs模板 int check(参数) {if(满足条件)return 1;return 0; }void dfs(int step) {判断边界{相应操作}尝试…

HPV为什么无症状?皮肤性病科专家谭巍解读具体原因

HPV,即人乳头瘤病毒,是一种常见的性传播疾病。然而,并不是所有感染HPV的人都会出现症状。为什么有的人感染HPV没有症状呢? 首先,需要了解的是,HPV感染是一种非常常见的现象。事实上,大约有80%的性活跃人群…

SLAM学习——相机模型(针孔+鱼眼)

针孔相机模型 针孔相机模型是很常用,而且有效的模型,它描述了一束光线通过针孔之后,在针孔背面投影成像的关系,基于针孔的投影过程可以通过针孔和畸变两个模型来描述。 模型中有四个坐标系,分别为world,c…

智能指针管理“newed对象”

为什么要有智能指针? 指针智能是管理管理动态内存分配对象的一种机制。它提供了自动管理内存,避免常见内存泄漏和悬空指针。 对于上述Func函数的操作,一不小心就会产生很多问题。 p1 new时候抛异常 什么都不做p2 new时候抛异常 p1需要被清理…