vite和webpack的区别

2023-11-13

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 则是更好的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vite和webpack的区别 的相关文章

随机推荐

  • VXLAN 大二层网络构建实战

    1 VXLAN 大二层网络 1 VXLAN背景 传统vlan可划分1 4094个子网 如果租户数量超过4094 就需要使用vxlan了 vxlan支持1670万个隔离网络通信 可以满足众多不同租户设计自己的内部网络 租户申请的云服务器来自不
  • 简单实用的数据库文档生成器

    哈喽 大家好 我是指北君 大家有没有过这样的经历 在DeadLine即将来临之际 文档尚未完成 面对纷繁复杂的数据库中各种表 视图 关联 存储过程等 你都不知道如何清晰准确的描述他们 不得不一个个打开表 视图 存储过程等查看 甚至可能因为疏
  • springboot自定义kafka消费者KafkaListenerContainerFactory配置说明和实验

    1 说明 实验一下 在spring boot中自行创建kafkaConsumer实例 进行消费 根据配置的不同 得出相应的结果 此例中 我使用 kafkaListenerContainerFactory自行创建了kafkaListener实
  • WSL环境中Pycharm的python控制台中报错 ModuleNotFoundError: No module named ‘xxx‘(WSL+Pycharm环境搭建系列之四)

    WSL环境中Pycharm的python控制台中报错 ModuleNotFoundError No module named xxx 0 前言 1 问题现象 2 问题分析 3 解决办法 0 前言 经过前面几次的努力 我们基本上完成了环境中的
  • 《python数据分析与应用》第四章:pandas统计分析基础

    第四章 4 1 读写不同数据源的数据 4 1 1 读 写数据库数据 1 数据库数据读取 注意 数据库的用户名 一般都是root 和密码 自己设置的 都是要用自己的 地址默认的127 0 0 1 读取函数 你自己把文件存在哪了 和存储函数 你
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络基本概念 本周跟大家分享解密蓝牙mesh系列第四篇 点这里查看第一篇 第二篇和第三篇文章 同时也是蓝牙mesh网络基本概念的第二部分 借助蓝牙mesh 您将能够创建大型网络并支持成千上万的设备之间进行安
  • css的新玩法,语法与规则

    css的新玩法 语法与规则 important 语法 Selector sRule important 说明 提升指定样式规则的应用优先权 IE6及以下浏览器有个比较显式的支持问题存在 important并不覆盖掉在同一条样式的后面的规则
  • 将Javaweb项目部署到云服务器

    一 前言 由于业务需要 要搞一个文件上传下载服务器 代码当前已经在localhost上调试成功 现在需要把这个项目部署到云服务器上 选择的服务器是vultr的vps 系统是Ubuntu16 04 二 环境准备 1 jdk安装 常规安装即可
  • [Spring][Redis]@Cacheable与redis整合时Value和Key的理解

    更新于2019年11 08 首先 多谢CHENFU ZKK同学指出我的错误 卧槽 吓我一跳 我还以为我以前学的搞错了 若不是我亲自测试一遍 差点信你了 这两天趁有空 跟踪了 Cacheable相关的源码再次确认结果如下 1 直接使用Spri
  • 华为OD机试 - 星际篮球争霸赛(Java)

    题目描述 在星球争霸篮球赛对抗赛中 最大的宇宙战队希望每个人都能拿到MVP MVP的条件是单场最高分得分获得者 可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场 并且让所有得分的选手得分都相同 然而比赛过程中的每1分钟的得分都只能由某一
  • 虚拟机联网图标丢失,连不上网的问题

    虚拟机连不上网 网络图标也消失不见了 输入ifconfig 发现也不显示ens33网卡 盲猜是由于关闭虚拟机的时候 一些配置出错 导致ens33网卡没有启动成功导致的 解决办法 重新开启网卡即可 1 关闭网络服务 sudo service
  • J2EE基础之集合框架List

    前言 今天跟大家发分享的是J2EE基础之集合框架List以及JavaWeb团队项目UML 昨天自己记录了J2EE一些基础知识 希望今天分享的知识对大家有用 首先跟大家讲一下今天要分享的知识 见思维导图 一 UML 1 含义 UML建模技术是
  • 异常日志分析

    从上往下看异常信息 直到第一行是自己写的代码为止 集成第三方工具 比如百度地图 先看demo 按着demo先跑来 然后再优化 跑demo出错了 先看异常日志 解决不了百度 百度地图集成注意类冲突 慢慢来
  • 无源定位入门(三)AOA(1)

    AOA交叉测向 基本原理 以M元均匀线阵为例 设单站匀速运动 第n个时刻的位置为 静止目标 则入射角方向为 设基站上有个M元均匀线阵 相邻阵元之间的间隔为d 其中为波长 第n个时刻线阵的方位角 与X正方向的夹角 为 与XY平面的夹角为 则线
  • 如何用sql语句创建一个表(简单基础)

    使用CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表 SQL CREATE TABLE 语法 CREATE TABLE 表名称 列名称1 数据类型 列名称2 数据类型 列名称3 数据类型 例题 创建一个ac
  • SPDK详解

    一 SPDK简介及基本使用 随着硬盘 闪存技术的高速发展 NVME ssd已逐渐进入分布式存储的核心领域 伴随着NVME ssd的出现 涌现出一批新型的存储名词 包括分层存储 分级存储 冷热存储 混合存储等 而这些名词的出现 也意味着ssd
  • sql 求分位数

    1 oracle求分位数 SELECT RES3 ORG NO 5 RES3 YM X1的上四分位数 PERCENTILE CONT 0 75 WITHIN GROUP ORDER BY RES3 X1 ASC AS X1 75 X1的上中
  • IntelliJ IDEA 常用快捷键,maven依赖图,个性化设置,禁用Search Everywhere

    查看idea 中jar关系图 快捷键 Ctrl 用于注释 取消注释 Ctrl Shift F 全文搜索 Ctrl F 单页面查找 Ctrl Alt Shift L 格式化代码 CTRL N 查找类CTRL SHIFT N 查找文件CTRL
  • 理解 spring 事务传播行为与数据隔离级别

    本文是为了个人学习使用 原文章链接 https www jianshu com p 760399781b78 https blog csdn net m0 37524661 article details 84935117 注 1 事务的隔
  • vite和webpack的区别

    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