vite和webpack的区别

news2024/12/22 19:15:27

vite和webpack的区别

  • 1、前言
  • 2、Webpack
    • 2.1 Webpack简述
    • 2.2 Webpack常用插件
  • 3、Vite
    • 3.1 Vite简述
    • 3.2 Vite插件推荐
  • 4、区别
    • 4.1 开发模式不同
    • 4.2 打包效率不同
    • 4.3 插件生态不同
    • 4.4 配置复杂度不同
    • 4.5 热更新机制不同
  • 5、总结

1、前言

WebpackVite是现代前端开发中非常重要的工具,有助于改善开发者的工作流程和提高生产力。从底层原理上来说,Vite是基于esbuild预构建依赖。而esbuild是采用go语言编写,因为go语言的操作是纳秒级别,而js是以毫秒计数,所以vite比用js编写的打包器快10-100倍。下面这篇博客将对比WebpackVite的区别,并探讨在什么样的项目中选择哪一个工具。

2、Webpack

2.1 Webpack简述

Webpack是一个模块打包工具,使得工程中的各种资源能够被打包成一个整体的bundle.js文件。Webpack具有很高的可配置性和灵活性,使得开发者可以使用各种插件和配置文件来优化它们的工作流程。Webpack适用于大型、复杂的项目,它可以处理多种不同类型的文件(如jscss、图片等),并根据需求进行转换、压缩和打包。但是,Webpack的配置可能比较复杂,需要花费一定的时间和精力进行学习和调试。

webpack原理图:

在这里插入图片描述

2.2 Webpack常用插件

html-webpack-plugin:将一个页面模板打包到dist目录下,默认都是自动引入js or css;

clean-webpack-plugin:用于每次打包dist目录删除;
extract-text-webpack-plugin:将css样式从js文件中提取出来最终合成一个css文件,该插件只支持webpack4之前的版本,如果你当前是webpack4及以上版本那么就会报错;
mini-css-extract-plugin:该插件与上面的exract-text-webpack-plugin的一样,都是将css样式提取出来, 唯一就是用法不同,本插件的webpack4版本之后推荐使用;
webpack.optimize.CommonsChunkPlugin:用于将页面里的公共代码提取出来,从而进行优化加载速度,该CommonsChunkPlugin只支持Webpack4之前;
optimization.SplitChunks:该功能与上面的webpack.optimize.CommonsChunkPlugin一样,只不过optimization.SplitChunks是webpack4之后推荐使用的;
DefinePlugin:用于注入全局变量,一般用在环境变量上;
ProvidePlugin:用于定义全局变量,如100个页面都引入vue,每个页面都引入只会增加工作量,直接在webpackProvide挂载一个变量就行,不用再去一一引入;
hot-module-replacement-plugin:开启热模块更新;
IgnorePlugin:用于过滤打包文件,减少打包体积大小;
uglifyjs-webpack-plugin:用于压缩js文件,针对webpack4版本以上;
copy-webpack-plugin:用于将文件拷贝到某个目录下;
optimize-css-assets-webpack-plugin:用于压缩css样式;
imagemin-webpack-plugin:用于压缩图片;
friendly-errors-webpack-plugin:美化控制台,良好的提示错误;

3、Vite

3.1 Vite简述

Vite是一个快速、轻量级的现代Web开发构建工具,它利用现代浏览器的原生ES模块加载功能,实现了开发环境中的快速冷重载和构建速度。Vite的开发体验非常好,因为它能够在开发时实时更新页面,而不需要对整个项目进行重新构建。相比于Webpack的构建过程,Vite的开发速度更快,也更适合小型、简单的项目。但是,Vite目前还不支持像Webpack那样的插件生态系统,因此其可扩展性还有待提高。

Vite原理图:

在这里插入图片描述

3.2 Vite插件推荐

Vite 是一个功能强大的开发构建工具,在插件方面也有很多的选择。以下是一些常用的 Vite 插件库推荐:

@vitejs/plugin-vue :官方提供的 Vue 插件,用于在 Vite 中编译 Vue 单文件组件。
unplugin-vue-components :一个可插拔的 Vue 组件库,支持按需加载、自动导入组件等。
vite-plugin-postcss :一个 PostCSS 插件,可以在 Vite 中使用 PostCSS 进行 CSS 预处理。
vite-plugin-style-import :一个样式导入插件,支持在 VueReact 等框架中按需加载样式文件。
vite-plugin-typescript :官方提供的 TypeScript 插件,用于在 Vite 中编译 TypeScript 文件。
vite-tsconfig-paths :一个 TypeScript 路径别名插件,可以在 Vite 中使用路径别名。
vite-plugin-md :一个 Markdown 插件,用于在 Vite 中编译 Markdown 文件。
vite-plugin-eslint :一个 ESLint 插件,可以在 Vite 中使用 ESLint 进行代码检查。

4、区别

4.1 开发模式不同

  • Webpack在开发模式下依然会对所有模块进行打包操作,虽然提供了热更新,但大型项目中依然可能会出现启动和编译缓慢的问题;
  • Vite则采用了基于ES Module的开发服务器,只有在需要时才会编译对应的模块,大幅度提升了开发环境的响应速度。

4.2 打包效率不同

  • Webpack在打包时,会把所有的模块打包成一个bundle,这会导致初次加载速度较慢;
  • Vite则利用了浏览器对ES Module的原生支持,只打包和缓存实际改动的模块,从而极大提高了打包效率。

4.3 插件生态不同

  • Webpack的插件生态非常丰富,有大量社区和官方插件可以选择,覆盖了前端开发的各个方面;
  • Vite的插件生态尽管在不断发展,但相比Webpack来说还显得较为稀少。

4.4 配置复杂度不同

  • Webpack的配置相对复杂,对新手不够友好;
  • Vite在设计上更注重开箱即用,大部分场景下用户无需自己写配置文件。

4.5 热更新机制不同

  • Webpack的热更新需要整个模块链重新打包和替换,对于大型项目可能会有延迟;
  • Vite的热更新则只会针对改动的模块进行更新,提高了更新速度

5、总结

综上所述,ViteWebpack 都是构建 Web 应用的工具,它们在开发模式、打包效率、插件生态、配置复杂度和热更新机制方面存在差异。如果你的应用程序规模较大,那么 Webpack 可能更适合你;如果你想要更快的开发和调试速度,那么 Vite 则是更好的选择。

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

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

相关文章

线性代数的本质(九)——二次型与合同

文章目录 二次型与合同二次型与标准型二次型的分类度量矩阵与合同 二次型与合同 二次型与标准型 Grant:二次型研究的是二次曲面在不同基下的坐标变换 由解析几何的知识,我们了解到二次函数的一次项和常数项只是对函数图像进行平移,并不会改变…

HSRP(热备份路由选择协议)的概念,原理与配置实验

作者:Insist-- 个人主页:insist--个人主页 梦想从未散场,传奇永不落幕,持续更新优质网络知识、Python知识、Linux知识以及各种小技巧,愿你我共同在CSDN进步 目录 一、了解HSRP协议 1. 什么是HSRP协议 2、HSRP协议的…

2023年主流固定资管理系统的特征

随着科技的不断发展,固定资产管理系统也在不断演进,以满足企业日益增长的管理需求。在2023年,主流固定资产管理系统将呈现出一些重要的特征,包括RFID功能、低代码平台功能和云计算功能。易点易动固定资产管理系统正是结合了这些特…

UWB芯片DW3000之PDOA测向实现源码

介绍 DW3000芯片的双天线端口特性可以测量无线输入信号的相位。当与天线响应的信息相结合时,这些信息可以用来帮助确定到达的方向和传输的位置。 根据设备的不同,将有一个或两个天线端口。具有两个天线端口的设备称为PDoA部件,而其他是非PDoA部件(见表1)。当涉及到到达相位…

算法分析与设计编程题 贪心算法

活动安排问题 题目描述 解题代码 vector<bool> greedySelector(vector<vector<int>>& intervals) {int n intervals.size();// 将活动区间按结束时间的从小到大排序auto cmp [](vector<int>& interval1, vector<int>& interval2…

(文末赠书)我为什么推荐应该人手一本《人月神话》

能点进来的朋友&#xff0c;说明你肯定是计算机工作的朋友或者对这本书正在仔细琢磨着的朋友。 文章目录 1、人人都会编程的时代&#xff0c;我们如何留存?2、小故事说明项目管理着为什么必看这本书3、如何评价《人月神话&#xff1a;纪念典藏版》4、本书的目录&#xff08;好…

模方新建工程时,显示空三与模型坐标系不一致怎么解决

答:检查空三xml与模型的metadata.xml的坐标系是否一致&#xff0c;metadata文件是否有在data目录外面。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.0新增单体化建模模块&#xff0c;…

无人机+三维实景建模助力古建筑保护,传承历史记忆

历史文化建筑&#xff0c;承载着过去各个时代的文化记忆。无论是保存还是修缮古建筑&#xff0c;都需要将其基本信息进行数字化建档&#xff0c;为修缮提供精准参考。根据住建部的要求&#xff0c;从2020年开始到2022年&#xff0c;全国需完成历史建筑100%测绘及系统录入工作&a…

OPENCV实现人类识别(包括眼睛、鼻子、嘴巴)

人脸识别步骤 # -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/14 """ import cv2 import numpy as np # load xml face_xml = cv2.CascadeClassifier(F:\\learnOpenCV\\opencv\\data\\haarcascades\\haarcascade_frontalface_defaul…

计算机提示vcomp120.dll丢失怎样修复,vcomp120.dll丢失的4个修复方法分享

随着科技的飞速发展&#xff0c;计算机已经成为了人们日常生活和工作中不可或缺的重要工具。在享受计算机带来的便利的同时&#xff0c;我们也会遇到各种各样的问题&#xff0c;其中计算机丢失vcomp120.dll文件就是一种常见的困扰。vcomp120.dll是 Visual C Redistributable 的…

【操作系统】聊聊协程为什么可以支撑高并发服务

在实际的业务开发中&#xff0c;比如针对一个业务流程&#xff0c;调用三方&#xff0c;然后存储数据&#xff0c;从oss上获取数据。其实都是进行的同步调用&#xff0c;说白了就是A完成之后&#xff0c;B在继续完成。如果整个过程中A、B、C 分别耗时100、300、200毫秒。那么整…

vue基础知识十:Vue中组件和插件有什么区别?

一、组件是什么 回顾以前对组件的定义&#xff1a; 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念&#xff08;组件&#xff09;来实现开发的模式&#xff0c;在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度&#xff0c;在保持接口不…

【VSCode】自动生成Jupyter(ipynb)文件的目录

下载插件 一键生成 然后就出来咯&#xff5e;

关于HTTP协议的概述

HTTP 的报文大概分为三大部分。第一部分是请求行&#xff0c;第二部分是请求的首部&#xff0c;第三部分才是请求的正文实体。 POST 往往是用来创建一个资源的&#xff0c;而 PUT 往往是用来修改一个资源的。 Accept-Charset&#xff0c;表示客户端可以接受的字符集。防止传过…

Python工程师Java之路(p)Module和Package

文章目录 1、Python的Module和Package2、Java的Module和Package2.1、Module2.1.1、分模块开发意义2.1.2、模块的调用 2.2、Package Module通常译作模块&#xff0c;Package通常译作包 1、Python的Module和Package Python模块&#xff08;Module&#xff09;&#xff1a;1个以.…

模拟实现C语言--strlen函数

模拟实现C语言–strlen函数 模拟实现C语言--strlen函数一、strlen函数是什么&#xff1f;二、strlen函数的模拟实现2.1 计数器方式实现strlen函数2.2 不创建临时变量计数器方式实现strlen函数2.3 指针-指针方式实现strlen函数 三、strlen函数的返回类型 一、strlen函数是什么&a…

vue-esign 签字组件

1、安装 npm install vue-esign --save 2、引入 // main.js import vueEsign from vue-esign Vue.use(vueEsign) 3、参数 属性说明类型默认值width画布宽度&#xff0c;即导出图片的宽度Number800height画布高度&#xff0c;即导出图片的高度Number300lineWidth画笔粗细Nu…

C++多线程的用法(包含线程池小项目)

一些小tips: 编译命令如下&#xff1a; g 7.thread_pool.cpp -lpthread 查看运行时间&#xff1a; time ./a.out 获得本进程的进程id&#xff1a; this_thread::get_id() 需要引入的库函数有&#xff1a; #include<thread> // 引入线程库 #include<mutex> //…

【python环境搭建】一台电脑下安装不同python版本时如何安装模块

我的环境中安装了2个版本的python&#xff1a; 一个时Anaconda的 一个是python3.10 多个版本python的安装 卸载 pip使用 详细方法可以看这个贴子 Windows环境同时安装多个版本的Python解释器 pip的使用 安装package pip install [package] 更新package pip install [pack…

下属不服管,当众顶撞自己怎么办?

作为领导者&#xff0c;面对下属公然顶撞自己&#xff0c;是一种不尊重和不合适的行为&#xff0c;可能会让你感到失望和困惑。然而&#xff0c;在处理这一情况时&#xff0c;你可以采取以下措施来妥善处理&#xff1a; 保持冷静&#xff1a;尽管受到了侮辱和指责&#xff0c;…