Vite2.0发布,Webpack等模块化编译打包的时代要结束了吗?

Vite号称下一代前端开发工具,噱头大还是真的有能力?之前就一直听说Vite那里好那里好,像极了别人家的孩子,今年2月Vite2.0发布,Vite时代拉开序幕

Vite是什么?

Vite 官方中文文档:https://cn.vitejs.dev/guide

Vite (法语意为 “快速的”,发音 /vit/) 是尤雨溪开发的一种新型前端构建工具,它基于原生ES模块提供了 丰富的内建功能。

  • 开发环境下使用模块热更新(HMR),项目随启随用,即时更新。
  • 生产环境下,它使用 Rollup 打包,并且它是预配置的,可以输出优化过的静态资源。显著提升前端开发体验。

为什么生产环境仍需打包?
尽管原生 ESM 现在得到了广泛支持,但由于嵌套导入会导致额外的网络往返,在生产环境中发布未打包的 ESM 仍然效率低下(即使使用 HTTP/2)。为了在生产环境中获得最佳的加载性能,最好还是将代码进行 tree-shaking、懒加载和 chunk 分割(以获得更好的缓存)。

要确保开发服务器和产品构建之间的最佳输出和行为一致并不容易。所以 Vite 附带了一套 预配置、预优化 的 构建命令,开箱即用。

为何不用 ESBuild 打包?
虽然 esbuild 快得惊人,并且已经是一个在构建库方面比较出色的工具,但一些针对构建 应用 的重要功能仍然还在持续开发中 —— 特别是代码分割和 CSS 处理方面。就目前来说,Rollup 在应用打包方面更加成熟和灵活。尽管如此,当未来这些功能稳定后,我们也不排除使用 esbuild 作为生产构建器的可能。

特点:

  • 即时服务器启动
  • 闪电快HMR
  • 丰富特征
  • 优化建造
  • 通用插件接口
  • 全类型API

对比Webpack

webpack 是一个现代 JavaScript 应用程序的静态模块打包器,通过编译打包显示,项目越大构建加载越慢
在这里插入图片描述
vite 只启动一台静态页面的服务器,对文件代码不打包,服务器会根据客户端的请求加载不同的模块处理,实现真正的按需加载
在这里插入图片描述

对比Snowpack

Snowpack也是一个与 Vite 十分类似的非构建式原生 ESM 开发服务器。除了不同的实现细节外,这两个项目在技术上比传统工具有很多共同优势。Vite 的依赖预绑定也受到了 Snowpack v1(现在是 esinstall)的启发。这两个项目之间的一些主要区别是:

  • Snowpack 的默认构建输出是未打包的:它将每个文件转换为单独的构建模块,然后将这些模块提供给执行实际绑定的不同“优化器”。这么做的好处是,你可以选择不同终端打包器,以适应不同需求(例如 webpack, Rollup,甚至是 ESbuild),缺点是体验有些支离破碎。

  • Vite 选择了与单个打包器(Rollup)进行更深入的集成。Vite 还支持一套 通用插件 API 扩展了 Rollup 的插件接口,开发和构建两种模式都适用。

这里我就不多说了,看看 官方怎么说?

使用Vite

Vite 官方目前提供了一个比较简单的脚手架:create-vite-app,可以使用这个脚手架快速创建一个使用 Vite 构建的 Vue.js 应用

npm init vite-app <project-name>
cd <project-name>
npm install
npm run dev

如果使用 yarn:

yarn create vite-app <project-name>
cd <project-name>
yarn
yarn dev

目录结构
在这里插入图片描述

运行

npm run dev

在这里插入图片描述
u1s1,快是真的快

ESM方式

Vite 以 原生 ESM 方式服务源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入的代码,即只在当前屏幕上实际使用时才会被处理。

在 Vite 中,HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效(大多数时候只需要模块本身),使 HMR 更新始终快速,无论应用的大小。

打开f12看一下来源文件
在这里插入图片描述
Vue文件都出现了两个同名文件,一个带?type=template后缀
这是因为vue被解析成render函数返回给浏览器渲染页面

request URL:http://localhost:3000/src/App.vue

koa中间件检测到请求的是vue模板文件,则会在请求后面添加一个type=template参数

变成:http://localhost:3000/src/App.vue?type=template
koa

通过这个参数来判断是请求vue模板文件,并编译成js文件返回给浏览器,浏览器使用get按需请求模式。

写在最后

这样看来Vite确实是有实力取代Webpack的,不过目前还在慢慢成熟的阶段,开发者使用的还比较少,Vue3项目使用居多,目前也提供 React Fast Refresh 支持,就像作者说的,一旦你体验到 Vite 有多快,我们十分怀疑你是否愿意再忍受像曾经那样使用打包器开发。确实是把我震撼到了,同时也希望越来越多开发者认识和使用Vite,祝Vite越来越好

### Vue3 打包工具 ViteWebpack 的对比分析 #### 性能表现 Vite 利用了现代浏览器对 ES Modules (ESM) 的原生支持,因此在开发环境中能够提供极快的冷启动速度和热更新性能[^2]。相比之下,Webpack 需要在每次更改时重新构建整个模块图,这可能导致较慢的反馈循环,尤其是在大型项目中。 #### 开发体验 Vite 提供了一种基于 ESM 的按需加载机制,使得开发者无需等待长时间的初始编译即可快速预览应用效果。而 Webpack 虽然也提供了 HMR(Hot Module Replacement),但在处理复杂依赖关系时可能会显得稍逊一筹[^1]。 #### 生态系统与插件支持 Webpack 拥有更加成熟和丰富的插件生态系统,几乎可以满足任何类型的前端需求。然而,对于专注于 JavaScript 库或小型项目的场景来说,Rollup 及其衍生产品 Vite 更加轻量级,并且通过精心设计的插件接口实现了良好的扩展性。此外,由于 Vite 设计之初就考虑到了 Rollup 插件系统的兼容性,许多现有的 Rollup 插件可以直接用于 Vite 中。 #### 构建产物优化 两者都能很好地执行 Tree-Shaking 来移除未使用的代码部分以减少最终文件大小。值得注意的是,尽管 Rollup/ Vite 在这方面具有天然优势,但随着技术进步,最新版本的 Webpack 同样在这方面表现出色。 #### 学习曲线 如果团队成员已经熟悉 Webpack,则继续沿用可能更为便捷;而对于新项目或者希望尝试新技术栈的情况下,采用 Vite 将会是一个不错的选择,因为它简化了许多配置细节并降低了入门门槛[^3]。 ```javascript // 示例:简单的 Vite 配置文件 import { defineConfig } from 'vite'; export default defineConfig({ plugins: [], }); ``` 综上所述,在选择适合 Vue3 项目的打包工具时应综合考量具体应用场景的需求——如果你追求极致的速度以及现代化开发流程带来的便利,那么 Vite 或许是更好的选项;但如果当前环境高度依赖于某些特定功能强大的 Webpack 插件,则保留后者可能是明智之举。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值