webpack 和 vite 区别

开发模式服务器启动

开发环境中,Webpack 是先打包再启动开发服务器,而 Vite 则是直接启动,然后再按需编译依赖文件。

  • 使用 Webpack 时,所有的模块都需要在开发前进行打包成一个或者多个 bundle,增加启动时间和构建时间。
  • Vite 在请求模块时再进行实时编译,这种按需动态编译的模式极大地缩短了编译时间,特别是在大型项目中,Vite 的优势更为明显。(应用中的模块区分为 依赖(node_modules) 和 源码(项目代码) 两类)

ESM 的支持

现代浏览器本身就支持 ESM,会主动请求获取文件,Vite 将开发环境下的模块文件直接作为浏览器要执行的文件。减少了 Webpack 将打包后的文件交给浏览器执行的过程。也正是因为 ESM 支持,使得 Vite 可以在开发模式服务器启动中,使用按需动态编译的模式编译依赖文件。

默认情况下,模块会延迟加载,执行时机在文档解析之后,触发DOMContentLoaded事件前。

底层语言的差异

  • Vite 使用 esbuild 预构建依赖。Esbuild 使用 Go 编写,比以 Node.js 编写的打包器预构建依赖快 10-100 倍。
  • Webpack 是基于 Node.js 构建。

预构建依赖通常指的是在项目启动或构建之前,对项目中所需的依赖项进行预先的处理或构建。这样做的好处在于,当项目实际运行时,可以直接使用这些已经预构建好的依赖,而无需再进行实时的编译或构建,从而提高了应用程序的运行速度和效率。

热更新

  • 在 Webpack 中,当一个模块或其依赖的模块内容改变时,需要重新编译这些模块。
  • 在 Vite 中,当某个模块内容改变时,只需要让浏览器重新请求该模块即可,这大大减少了热更新的时间。

热更新的出现:一般打包器中,当一个模块或其依赖的模块内容改变时,需要重新编译这些模块。显然我们不应该重新构建整个包,因为这样更新速度会随着应用体积增长而直线下降。一些打包器的开发服务器将构建内容存入内存,这样它们只需要在文件更改时使模块图的一部分失活,但它也仍需要整个重新构建并重载页面。这样代价很高,并且重新加载页面会消除应用的当前状态,所以打包器支持了动态模块热重载(HMR):允许一个模块 "热替换" 它自己,而对页面其余部分没有影响。这大大改进了开发体验 - 然而,在实践中我们发现,即使是 HMR 更新速度也会随着应用规模的增长而显著下降。

  • 在 Vite 中,HMR 是在原生 ESM 上执行的,非常快。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效(大多数时候只需要模块本身),使 HMR 更新始终快速,无论应用的大小。
  • Vite 同时利用 HTTP 头来加速整个页面的重新加载(再次让浏览器为我们做更多事情):源码模块的请求会根据 304 Not Modified 进行协商缓存,而依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。

生态

  • wepback 生态丰富、社区资源丰富,有大量可以使用的 loader 和 plugin,可高度配置。
  • 配置较为复杂。而 vite 开箱即用,配置简单。

开发环境

  • 使用 rollup是因为 esbuild对于 css 处理和代码分割不是很友好。
  • 不过目前尤大团队正在开发 rolldown,以便同时管理预构建和打包,取代 esbuild + rollup。
相关推荐
xyphf_和派孔明11 分钟前
企业级微前端项目完整创建步骤,第三步:配置 Vue 子应用
前端·javascript
自强的小白12 分钟前
条件查询或查询全部时时前端请求数据等时间格式
前端
阳光是sunny30 分钟前
LangGraph实战教程:一文搞懂图的状态(State)管理
前端·人工智能·后端
whyfail43 分钟前
前端学 Spring Boot(5):从“你是谁”到“服务真的上线了”
前端·spring boot·后端
码农学院1 小时前
Node.js MongoDB构建户外用品GEO优化内容管理平台
数据库·mongodb·node.js
程序员黑豆1 小时前
鸿蒙开发:RelativeContainer相对布局组件实战——实现5个文本组件对齐
前端·华为·harmonyos
环境栈笔记1 小时前
高性价比指纹浏览器推荐与选型:如何对照价格和实际可用功能筛选候选
前端·人工智能·后端·自动化
hyf3266332 小时前
泛程序哪有想象中难!小白跟着走一遍就全懂
前端·爬虫·搜索引擎·seo·蜘蛛池
码农学院2 小时前
React公众号开发:母婴用品会员积分体系技术方案
前端·react.js·前端框架
路光.2 小时前
Vue2升级Vue3处理原 UMD/CommonJS 打包文件,不是标准 ESM
前端·javascript·vue.js·vue3