Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Webpack多页面项目转Vite升级初尝试

Webpack多页面项目转Vite升级初尝试

作者头像
gary12138
发布于 2022-10-05 08:12:06
发布于 2022-10-05 08:12:06
1.9K00
代码可运行
举报
文章被收录于专栏:前端随笔前端随笔
运行总次数:0
代码可运行

最近社区讨论Vite火热,而且听说它是个“快枪手”,作为一个切图仔快代表着效率,怀着对快的期待和提高自己的眼界(吹牛的本事),尝试使用Vite对现有一个基于webpack多页面项目进行升级。

本文非深入了解,从中你能对Vite有个初步的认识,以此来对比与Webpack的差异,看完后你能了解到以下内容:

  • Vite火热的原因
  • Vite的优点是什么
  • Vite的缺点是什么
  • 升级过程的坑
  • 升级后的项目的提升(打包速度具象化,热更新速度具象化,包体积具象化)

Vite的吸引力

是什么原因导致Vite让那么多人垂涎呢?我最开始听到Vite时他们说它真的很快,但是大家都是打包工具,为什么说Vite比Webpack快呢?我们一起来揭秘,官方是这样介绍Vite的:

  • 极速的服务启动,使用原生 ESM 文件,无需打包!
  • 轻量快速的热重载,无论应用程序大小如何,都始终极快的模块热重载(HMR)
  • 丰富的功能,对 TypeScript、JSX、CSS 等支持开箱即用。
  • 优化的构建,可选 “多页应用” 或 “库” 模式的预配置 Rollup 构建
  • 通用的插件,在开发和构建之间共享 Rollup-superset 插件接口。
  • 完整类型化的API,灵活的 API 和完整 TypeScript 类型

我们来新建一个Vite的demo,使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn create vite

就能轻松的创建起项目,其中会让你选择你要使用的框架,操作完成后,我们会看到根目录有一个index.html, 和Webpack不同,Vite是基于html作为入口,而Webpack是基于Js作为入口。在html中我们看到利用Vite建起的项目script中使用了type=”module”,这是什么呢?ES Modules 是用于处理模块的 ECMAScript 标准。通过设置type=”module”,我们可以在当前脚本支持使用import export来进行编写代码。

基本上现代浏览器都已经支持ESM的方式了

而这就是Vite快的秘密,Vite通过使用esm和koa中间件拦截请求,我们可以只在需要某个模块的时候动态(借助 import() )的引入它,而不需要提前打包。这一点和Webpack完全不同,Webpack会将各模块提前打包进bundle里,但打包的过程是静态的,就是在修改某一处代码后,会把所有模块进行打包,这样的坏处就是随着项目越来越大打包后的 bundle 也越来越大(当然Webpack也提供了很多类似bable-cache等插件来提高效率),即使这样Webpack依旧会执行打包这个过程,这样对比Vite来说确实不够优雅,因为vite来说,借住ESM它直接省去了打包这个过程。

优点

  1. 创建简单

Vite继承了Vue优良的传统,重在提高开发效率,所以相比Webpack减少了很多配置,使用Vite,你不再配置各种基础预处理器,它都内置了

  1. 与框架无关

虽然它的作者是Vue的创造者,但是Vite却与框架无关,它能和React,Vue,Svelte、Preact等框架使用

缺点

  1. 灵活度

因为本身的内部封装好了很多东西,所以现在看来定制化是比较困难的,这个点是看自己取舍,各有利弊。

  1. 未知性

现在Vite2出来没多久,社区还没有很多大型项目实践,是否还有很多坑有待观望

  1. 构建不一致

这也是我最担心的一点,开发的时候使用ESM方式进行开发,打包的时候使用Rollup进行打包,也就是说使用了两套方式,会担心生产环境和开发环境不一致情况,导致打包后的bug不好在生产环境中进行调试,这个点有待考察,需要对之后迁移的项目进行深度测试。

项目迁移

因为我们项目是从古老的手动打包升级到了webpack打包,大部分页面本身都使用了html,所以迁移成本比较少,主要是在原有的html中插入script type=module代码

迁移时遇到的问题:

  1. 过去一些图片资源使用require引入的均无法使用,需要修改为import,这点是因为本身Vite开发环境基于ESM而不支持CommonJs
  2. 过去我们使用环境变量并没特别的规范,在Vite中为了防止意外地将一些环境变量泄漏到客户端,只有以 VITE_ 为前缀的变量才会暴露给经过 Vite 处理的代码(这点和CRA类似),并且不是使用process.env的方式获取环境变量,而是使用import.meta.env的方式去获取。
  3. Vite默认打包兼容ESM,这里我们需要安装@vitejs/plugin-legacy来解决不支持的浏览器处理

整个项目迁移只用了不到2个小时,大部分时间在处理通过require引入的模块和资源,而打包好的文件是否能使用到生产环境还有待考究,打包后依然会引入ESM的方式,但是在ESM后加入了NoModule的加载方式。这样的好处在于现代浏览器我们将不在用加载那么多Polyfill,减少不必要的资源加载。如下:

项目提升

测试环境 window10 8G i5-6200U

单页面测试使用了项目中涉及资源和依赖最多的一个页面(图片资源100+,js文件20+);

打包工具

单页面启动

多页面启动

单页面开发环境修改

多页面开发环境修改

单页面打包

多页面打包

webpack4

9.964s

18.829s

0.827s

4.347s

11.981s

26.57s

vite

0.694s

1.5s

未知(<50ms)

未知(<50ms)

8.8s

27.09s

在打包效率上基本一致,因为本身打包Webpack和Rollup差异不大,在打包上的优势就没有那么突出,打包体积上也相差不多,这里也就不做对比。

总结

完成了项目的迁移,对Vite有了大致的了解,在兼容性配置上有很多坑,可以继续沿用Webpack进行打包,而在开发环境使用Vite进行开发或许也是一个很好的搭配。后续主要还是对Vite配置做详细的认识和对项目进行测试,看是否有未触及的坑,未来对Vite持续观望,期待(愿景)有一天能摈弃各类打包工具,原生支持那该是多么美好。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[ Vite ] 使用 vite 重构 webpack 项目过程中对两者之间差异对比的思考( 一 )
基于 vite 的优点速度快和热拔插功能,最近也在尝试将原来 webpack 构建的项目迁移改用 vite 构建代码,这里将他们迁移过程遇到的问题和总结记录下来。
GavinUI
2022/05/24
2.2K0
[ Vite ] 使用 vite 重构 webpack 项目过程中对两者之间差异对比的思考( 一 )
Vue3 中的脚手架工具Vite到底牛在哪, 一文全知道
Vue是一套用于构建用户界面的渐进式框架,与其它大型 JS 框架不同,Vue 被设计为可以自底向上逐层应用,更易上手,还便于与第三方库或既有项目整合,因此,Vue完全能够为复杂的单页应用提供驱动。
秋风的笔记
2021/07/09
1.9K0
人生苦短我用Vite:基本原理及使用方式
尤雨溪说Vite很快,我一开始是不相信的。直到我亲自使用过后,我被Vite的速度震惊到了。
玖柒的小窝
2021/10/26
1.1K0
人生苦短我用Vite:基本原理及使用方式
在字节某中后台项目中落地 Bundleless,我经历了什么?
最近在公司探索落地 Bundless 构建工具,尝试将现有的一些业务项目 从 Webpack 往 Vite 迁移,由于中后台项目一般对浏览器兼容性要求不高,可以大胆引入一些前沿且激进的方案,因此在公司找到了一个业务中后台项目初步尝试引入 Vite。
用户3806669
2021/09/17
7520
愿未来没有 Webpack
现在是 1941 年。你的名字是 Richard Hubbell。你在 CBS 旗下的一个试验性的纽约电视演播室工作。你将要主持一场重大电视新闻广播,这是世界上首批电视节目之一,你还有 15 分钟就要上场了。你知道你一会儿要干嘛吗?
ConardLi
2019/09/10
6550
愿未来没有 Webpack
webpack实战——JS打包工具
前面篇章叙述了关于webpack的许多内容,从入门,打包第一个模块,到进阶,最后到本地、生产及打包的优化。本篇则提及一下在JavaScript社区中另外的一些类似的打包工具,它们有的更加轻量、简洁,有的则更专注于某类特定场景等。通过了解这些,希望会有助于我们开发时从更多的角度和方向来认识打包工具及其发展,进而选用更加适合我们项目的打包工具。
流眸
2020/11/06
2.1K0
Vite 原理浅析及应用
Tips: 如果大家想直接看重点可以跳过前言,这里将介绍一下为什么我会有这次分享,也就是本次分享的背景以及目的。
离殊
2022/04/01
1.7K1
Vite 原理浅析及应用
B乎问题:通俗的解释下Vite能用来干嘛?是怎么回事?
最近在B乎看到了这么一个问题,能不能通俗地讲 Vite 到底是用来干嘛的,一开始觉得这个问题没什么意思,因为 Vite 这个话题有太多的人讲了。
秋风的笔记
2021/08/27
2.6K0
B乎问题:通俗的解释下Vite能用来干嘛?是怎么回事?
Vite和Webpack的核心差异
写在开头 最近的vite比较火,而且发布了2.0版本,vue的作者也是在极力推荐 在之前的文章里面我提到过,vite的缺点在于目前的生态不够webpack成熟,但是只要能弥补这个缺点,便有很大概率能替代目前webpack的大部分市场 全方位对比vite和webpack webpack打包过程 1.识别入口文件 2.通过逐层识别模块依赖。(Commonjs、amd或者es6的import,webpack都会对其进行分析。来获取代码的依赖) 3.webpack做的就是分析代码。转换代码,编译代码,输出代码 4.
公众号@魔术师卡颂
2021/03/15
4.3K0
搭建 Vue + Vite 入门项目
虽然市面上有很多的打包工具,例如 webpack、Rollup 以及 Parcel 等。毫无疑问,通过使用这些工具,在很大程度上改善了前端开发者的游戏体验。 但随着业务变得越来越复杂,我们不得构建比之前更大型的应用。此时,所需要处理的代码量也越来越大。这时候,上面提到的打包工具就开始遇到性能瓶颈,我们可能需要很长的时间才能启动开发服务器,这样一来,开发效率就变得越来越低。 针对这一现状,大佬们又构建了一个打包工具 ,也就是今天文章的主角 - Vite。Vite 旨在利用生态系统中的新进展来解决上面的问题,通过将应用中的 依赖 和 源码 相分开,从而缩减开发服务器的启动时间。
村雨遥
2022/06/08
5120
搭建 Vue + Vite 入门项目
尤雨溪-vite多久后能干掉webpack?
从定位来说两者就是不一样的:webpack core 是一个纯打包工具(对标 Rollup),而 Vite 其实是一个更上层的工具链方案,对标的是 (webpack + 针对 web 的常用配置 + webpack-dev-server)。 webpack core 因为只针对打包不预设场景,所以设计得极其灵活,不局限于针对 web 打包,几乎所有可配置的环节都做成了可配置的。这种极度的灵活性对于一些特定场景依然不可替代。但反过来导致的缺点就是配置项极度复杂,插件机制和内部逻辑晦涩难懂,针对常见的 web 也需要大量的配置。另外大量 loader 插件虽然单独发布却存在各种隐式耦合,很容易配置不当互相影响。对于新手来说,把 webpack 从零开始配到跟 Vite 开箱即用功能对等的程度根本是不可能的任务,所以大部分团队/公司要么用的是基于 webpack 包一层的脚手架(umi, vue-cli),或是专门养一个人称 webpack 配置工程师的角色。 Vite 的选择是缩窄预设场景来降低复杂度。如果预设了 web 的场景,那么大部分常见的 web 构建需求都可以直接做成默认内置。由于内置,可以适当的增加各个环节之间的耦合来进一步降低复杂度;同时浏览器场景下意味着可以利用原生 ESM,更进一步又可以基于原生 ESM 实现理论最优性能的热更新。 换言之 Vite 从一开始就不是冲着对标 webpack 100% 使用场景来的。这是一个目标场景 vs. 复杂度的取舍。有些场景,比如针对 Node 打包,本来就不属于 Vite 的目标场景(这个场景可以直接用 esbuild)。但是在纯 web 这个目标场景下,Vite 可以做到在对标 webpack 栈对等功能的前提下极大的降低配置复杂度和提升开发体验。 有些人的态度是这都是不痛不痒的东西 —— 怎么说呢,反正习惯了 Vite 的热更新速度之后你给我钱我也不想再用 webpack。有些人对 Vite 的怀疑其实不是 Vite 本身的问题 —— 核心还是在于已经稳定运行的 webpack 项目要换构建工具是个潜在成本很大的事情,没人愿意背锅而已。比起背锅,还不如多等几秒热更新(唉,也是可以理解的)。
用户10106350
2022/10/28
1.6K0
Vite 的好与坏
一开始我是拒绝的,从 grunt、gulp ,到 Webpack、Rollup、Snowpack 以及若干知名不知名构建框架,都2021了,还来?然后试用了一下,嗯,是真的香!
@超人
2021/07/29
6390
Vite 的好与坏
Vite--前端工程化
当下,在项目开发的过程中,前端工程师们越来越离不开构建工具了,可以说构建工具已经成为了前端工程项目的标配。
江拥羡橙
2023/12/15
2400
Vite--前端工程化
vite 为什么比 webpack 快?
实际开发体验中,大家都可以明显感觉到 rollup 都比 webpack 启动快多了,实际是什么原因?
蓓蕾心晴
2022/09/30
1.7K0
vite 为什么比 webpack 快?
2025新鲜出炉--前端面试题(四)
回答: 是的,我在之前的项目中实现过服务端渲染(SSR),主要使用 Next.js(React 生态)和 Nuxt.js(Vue 生态)。服务端渲染的核心目的是提升首屏加载性能、SEO 友好性以及用户体验。具体实现包括:
全栈若城
2025/02/10
1790
2025新鲜出炉--前端面试题(四)
Vite和Webpack的优缺点
Vite与Webpack是两种常用的前端构建工具,它们在原理和打包流程上有一些区别。
can4hou6joeng4
2023/11/28
1.4K0
vite —— 一种新的、更快地 web 开发工具
vite —— 一个由 vue 作者尤雨溪开发的 web 开发工具,它具有以下特点:
lucifer210
2020/06/15
1.7K0
用 vite 2 平滑升级 vue 2 + webpack 项目实战
之前的 webpack 命令加前缀(如:"webpack:build"),继续可用
PHP开发工程师
2022/03/10
1.6K0
用 vite 2 平滑升级 vue 2 + webpack 项目实战
取代Webpack的打包工具Turbopack究竟有多快
10 月 25 日,Next.js 13 正式发布。同时,Vercel 还推出并开源了下一代打包工具:Turbopack。Turbopack 是针对 JavaScript 和 TypeScript 优化的增量打包工具,由 Webpack 的创建者 Tobias Koppers 和 Next.js 团队使用 Rust 编写。Turbopack 的推出吸引了众多前端开发者的关注,并且Turbopack具有如下一些优势。
xiangzhihong
2022/11/11
4.3K0
取代Webpack的打包工具Turbopack究竟有多快
三大前端构建工具横评,谁是性能之王!
而在Vite之前,还有Snowpack也同样采用了No-Bundler构建方案。那么No-Bundler模式与传统老牌构建工具Webpack孰优孰劣呢?能否实现平滑迁移和完美取代?
Nealyang
2021/03/26
2.1K0
三大前端构建工具横评,谁是性能之王!
相关推荐
[ Vite ] 使用 vite 重构 webpack 项目过程中对两者之间差异对比的思考( 一 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验