构建工具 Vite、Webpack、Rollup对比

article/2025/11/3 19:10:02

Webpack介绍

  1. 热更新方面:webpack支持HMR,但是webpack需要全部重新编译并更新,效率较低
  2. tree-shaking:webpack2开始支持且消除效果不好,但是webpack5有更好的tree-shaking(去除未使用代码)
  3. 分包方面:webpack支持代码切割。(分包)
  4. ESM打包:现在webpack支持es6module输出

Rollup介绍

优点:

  1. Rollup 是一款 ES Modules 打包器,从作用上来看,Rollup 与 Webpack 非常类似。不过相比于 Webpack,Rollup要小巧的多,打包生成的文件更小。(识别commonJs需要插件)
  2. 热更新:Rollup不支持HMR,在对js以外的模块的支持上不如webpack,但是如果是打包纯js库例如react,前期的vue的话,使用rollup是很合适的,打包的产物比较干净,没有webpack那么多工具函数
  3. Rollup 的插件机制设计得相对更干净简洁,单个模块的 resolve / load / transform 跟打包环节完全解耦,所以 Vite 才能在开发时模拟 Rollup 的插件机制,并且兼容大部分 Rollup 插件
  4. rollup原生支持tree-shaking

缺点:

  1. 加载其他类型的资源文件或者支持导入 CommonJS 模块,又或是编译 ES 新特性,这些额外的需求 Rollup需要使用插件去完成
  2. rollup并不适合开发应用使用,因为需要使用第三方模块,而目前第三方模块大多数使用CommonJs方式导出成员,并且rollup不支持HMR,使开发效率降低

Vite介绍

vite是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:

  • 一个开发服务器,它基于 原生 ES 模块 提供了丰富的内建功能,如速度很快的 【模块热更新HMR】
  • 一套构建指令,它使用 Rollup打包你的代码,并且它是预配置的,可以输出用于生产环境的优化过的静态资源

Vite主要特点如下:

  • 快速的冷启动:vite会直接启动开发服务器,不需要进行打包操作,所以不需要分析模块的依赖、不需要编译,因此启动速度非常快
  • 即时的模块热更新
  • 真正的按需编译:利用现代浏览器支持ES Module的特性,当浏览器请求某个模块的时候,再根据需要对模块的内容进行编译,这种方式大大缩短了编译时间

优点:

  1. vite热更新,实现按需编译,按模块更新。(快)
  • 在 Vite 中,HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效,使 HMR 更新始终快速,无论应用的大小。
  • Vite 同时利用 HTTP 头来加速整个页面的重新加载(再次让浏览器为我们做更多事情):源码模块的请求会根据 304 Not Modified 进行协商缓存,而依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。
  • 热更新原理:在热模块HMR方面,当修改一个模块的时候,仅需让浏览器重新请求该模块即可,无须像webpack那样需要把该模块的相关依赖模块全部编译一次,效率更高

2. vite在生产环境通过Rollup进行打包(特点:打包体积小),生成esm模块包。(特点:快)

  • vite在开发环境时,基于浏览器支持esm,让浏览器解析模块,然后服务器按需编译返回。同时基于esbuild(go)进行预构建打包不常变动的第三包,并用进行缓存。(缓存+快)
  • Vite 使用 esbuild 预构建依赖。Esbuild 使用 Go 编写,并且比以 Node.js 编写的打包器预构建依赖快 10-100 倍。

缺点:

  1. 生态:生态不如webpack,wepback在于loader和plugin非常丰富
  2. prod环境的构建:目前用的Rollup,原因在于esbuild对于css和代码分割不是很友好
  3. 还没有被大规模使用,很多问题或者诉求没有真正暴露出来

 结论:

 Rollup更适合打包库,webpack更适合打包项目应用,vite基于rollup实现了热更新也适合打包项目。

参考:vite 相比webpack的优缺点。 - 知乎


扩展:

  1. webpack生命周期
  • 使用配置文件中的参数初始化compiler对象,初始化所有插件
  • 从入口文件出发,调用所有loader对模块进行处理(链式),再找出该模块依赖的模块进行处理
  • 根据入口和模块之间的依赖关系,组装成一个个包含多个模块的chunk,再把每个chunk转换成一个单独的文件加入到输出列表
  • 根据配置确定输出的路径和文件名,写入文件系统
  • 在以上过程中,Webpack会在特定的时间点广播出特定的事件,插件在监听对应的事件后会执行特定的逻辑
  • Webpack以开发模式运行时,每当检测到文件变化,一次新的Compilation被创建。

2. webpacl热更新原理:Webpack HMR 原理解析 - 知乎


http://chatgpt.dhexx.cn/article/qiuPotBK.shtml

相关文章

前端三大构建工具 Webpack、Vite、Rollup 优劣势及原理分析

在刚刚结束的 VueConf2021 中,除了 Vue 3.0 以外,另外一个亮点就是下一代构建工具 Vite 了。 在尤雨溪分享的【 Vue 3 生态进展和计划】的演讲中,尤大神还特意提到 Vite 将成为 Vue 的现代标配。甚至最近新推出的 Petite Vue 从开发、编译、发…

从Npm Script到Webpack,6种常见的前端构建工具对比

从Npm Script到Webpack,6种常见的前端构建工具对比 小编说:历史上先后出现了一系列构建工具,它们各有优缺点。由于前端工程师很熟悉JavaScript,Node.js又可以胜任所有构建需求,所以大多数构建工具都是用Node.js开发的。…

前端开发入门:前端构建工具百度FIS

FIS是什么? FIS全称为Front-end Integrated Solution,即前端集成解决方案。前端团队发展大多会经历规范设计、技术选型、系统拆分、性能优化等阶段,其中的技术需求可以总结为前端集成解决方案。FIS是专为解决前端开发中自动化工具、性能优化…

前端工程化——构建工具选型

一、什么是前端工程化 前端工程化是依据业务特点,将前端开发的规范、流程、技术、工具、经验等形成规范并建立成一种标准的体系。 二、为什么要前端工程化 实现前端工程化的目的简单来说就是通过流程规范、自动化工具来提升前端的开发效率、性能、质量、多人协作…

前端构建工具与应用程序测试

1、前端构建工具 什么是前端构建? 什么是构建工具? 自动构建工具 Npm Scripts(推荐) Npm Scripts(NPM脚本)是一个任务执行者。NPM是安装Node时附带的一个包管理器,Npm Script 则是 NPM 内置…

前端构建工具gulp的详细介绍以及使用

什么是 gulp为什么要用 gulp如何使用 gulp Installing Gulp Install the gulp commandInstall gulp in your devDependencies Create a gulpfileTest it out gulp API 什么是 gulp gulp 是一个前端构建工具,它能通过自动执行常见任务,比如编译预处理 CS…

去中心化的前端构建工具 — Vite

为什么要使用Vite 在浏览器中提供ES模块之前,开发人员没有以模块化方式编写JavaScript的本机机制。这就是为什么我们都很熟悉“捆绑”的概念:使用工具来抓取、处理和连接源模块到可以在浏览器中运行的文件中。 随着时间的推移,我们看到了webpack、Roll…

vite 前端构建工具

目录 一、vite 简介二、vite 语法纪要三、用 vite 创建项目1、用 vite 创建一个 react 项目2、用 vite 创建一个 vue3 项目 四、vite 和 webpack 的比较 一、vite 简介 Vite 官方中文文档 vite.config 配置文件 Vite 是一个 web 开发构建工具,由于其原生 ES 模块导入…

前端构建工具(理解+使用)

一、构建工具可以做什么? 安装 vs 做事情 1、安装包工具:例如:npm、Bower,Yeoman可以安装几乎所有的东西。 他们可以安装前端框架,比如Angular.js或者React.js。 他们可以为你的开发环境安装服务器。 他们可以安装…

前端构建工具的未来

本文作者系360奇舞团前端开发工程师 本文为翻译 原文标题:The Future Of Frontend Build Tools 原文作者:Alexander Joseph 原文链接:https://www.smashingmagazine.com/2022/06/future-frontend-build-tools/ 前端构建工具对现代前端开发者的…

对前端构建工具的一些理解

前言 最近有幸在前端团队里面做了一次关于 webpack 的技术分享。在分享的准备过程中,为了能让大家更好的理解 webpack,特意对市面上以前和现在流行的构建工具做了一个梳理总结。在整理和分享的过程中,获益匪浅,对前端构建工具有了…

前端构建工具大盘点:gulp、webpack、vite、rollup、esbuild、snowpack、babel、parcel、swc、tsc

文章目录 背景分类转译器打包器 对比gulp VS webpackBundle vs Bundleless(代表就是webpack VS vite)其他比较 个人理解总结官网 背景 做前端也有好多年了,从最早的 jQuery 时代到现在的三大框架,这过程中用到了很多构建工具&…

前端程序员常用的9大构建工具

构建工具是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk)。构建包括编译、连接跟把代码打包成可用的或可执行的形式。 在小型项目中,开发者往往手动调用构建过程,这样在大型的项目中很不实用,在构建过程中难以跟…

Git入门指南二:初次运行Git前的配置

Git入门指南二:初次运行 Git 前的配置 初次运行 Git 前的配置 Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量,正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。 这些变量可以存放在以下三个…

Linux下使用Git入门

什么是版本控制 简单理解就是把文件每次的修改都记录下来,包括最初的一个版本。 在gitee上创建一个仓库 这样仓库就创建好了 gitclone 把仓库克隆到本地目录下 先选择一个目录来存放我们的仓库目录 然后把这个仓库的路径给复制上 在对应的目录下输入指令git …

Git入门级教程(轻松上手)

Git入门以及在Idea中集成使用Git 前言:当我们在团队开发的时候,我们需要一个工具来协同进行项目的完成,这个工具就是git。此博客内容是自己学习的笔记,我认为知道这些便可以轻松使用git了。 Git就是一种分布式版本控制系统 1.安装…

Git入门学习教程

Git学习 文章目录 Git学习1.简介2.工作流程图3.安装3.1 常用指令 4.环境配置4.1 查看配置4.2 配置用户名(必须)和邮箱 5.创建仓库6.基础操作指令6.1 查看状态(status)6.2 添加工作区到暂存区(add)6.3 提交暂…

【Git从入门到精通】Git入门

什么是版本控制 版本控制是一套系统,按时间记录某一个或一系列文件的变更,查看以前的特定版本。 使用版本控制系统,你可以将文件或者整个项目恢复到先前的状态,还可以对以前的文件进行对比。 本地版本控制系统 本地版本控制系…

Git入门看这一篇就够了

老规矩,在学习前我们先看一下学习框架: Tip: Git分支内容较多就放在另一篇文章中啦 目录 Git起步——版本控制 版本控制软件 版本控制软件的好处 版本控制软件的分类 Git基础 Git基础 Git中的三个区域 Git中的三种状态 基本的Git工作流程 安装…

Git入门级教程

文章目录 一.Git概述?1.什么是Git?2.通过git我们可以:3.Git工作流程图4.工作区、暂存区、版本库 概念5.Git的下载与安装6.Git代码托管服务 二.Git常用命令1.Git全局设置2.获取Git仓库:4.本地仓库操作常用命令5.远程仓库操作的常用命令5.1配置SSH钥6.分…