今天来聊一聊前端的打包工具,以及未来期望

前端总是喜欢重复造轮子,很多库都是处于可以有,但没必要的存在,比如各式各样的UI组件库等。这两年的打包工具也是打得十分火热,各种号称速度提升多少多少倍的新工具,层出不穷。它们对实际的开发中真的有提升吗?应用场景是什么?今天就来缕一缕。

webpack

周下载量2千万。

作为打包工具的老大哥,虽然有很多新的打包工具号称要取代webpack,但是至今无人能够撼动其地位。其丰富的生态,是目前任何打包工具都无法比的。

webpack真的很慢吗?在webpack4.x之前,确实是这样的,由于基于js的打包,导致打包速度非常缓慢。但是webpack5.x之后,速度可以说是有质的提升。有了cache的加持,二次构建的时候,速度也可以非常快。再加上swc-loader的加入,替换掉传统的babel-loader,因其是rust开发的,打包速度更是惊人。

这也是出现了这么多新的打包工具时,webpack依旧能坐稳打包工具老大哥的宝座的原因。别人在进步的同时,webpack也在进步。

缺点:并不是开箱即用,要学习很多配置,增加了使用成本。

rollup

周下载量1.5千万。

如果不是vite带火了rollup,目前的人用rollup应该还是比较少的,其配置等和webpack相差不大,选择使用rollup并没有更多的好处,所以大家更愿意选择webpack而不是rollup。但因其对ES模块支持良好,而被vite团队采用。

在打包工具大战中,你可以看到新工具和webpack对比的,可以看到新工具和esbuild对比的。却几乎很少看到新工具很少和rollup对比的,有种上不了台面的感觉。从其打包能力来说,rollup也只适合中小型项目。

esbuild

周下载量1.9千万。

依稀记得esbuild横空出世,拉开了打包工具大战的序幕,让一个新的工具链vite出现在大家面前。其开箱即用的特性,也让打包变得不再是一件麻烦事。不过目前来说,还是很少人会直接用esbuild来打包项目。就连vite也只是让其来做开发环境下的预打包,而不是打包。虽然也是以esbuild-loader的形式出现在webpack中,但是那样使用的话,功劳又变成webpack了。

后面出现越来越多优秀的打包工具,esbuild似乎又有点不够看了。所以我对esbuild的未来期望是,能够成为vite的备胎活下去(dev),但是又很难闯出自己的天地。

turbopack

周下载量160万。

一款号称比webpack速度快700倍的打包工具,因为是用rust写的,速度自然不用说了。不过不管速度如何,噱头确实满满。加上有一个好爹------vercel,未来发展肯定是前途一片光明,肯定会成为开发react的标准打包工具。

但是很可惜,react/nextjs独享,vue开发者们就没这个福气了。

rspack

周下载量7万。

字节跳动出品,用于解决他们公司巨石应用时打包时速度慢的问题,也是用rust写的。vue开发者们,虽然turbopack没有享用,但是rspack却可以一试,其对vue支持。

比较尴尬的是,vue官方推荐vite开发,但是vite开发却难尽人意,因其打包工具用的是rollup,rollup又很慢,通常打包一个中型项目要花几分钟。rspack却能做到很快。

虽然rspack现在还很年轻,但是因其支持vue、react,并且兼容webpack的loader,各方面也是开箱即用,所以未来我还是挺看好rspack的。

farm

周下载量105。

也是一个用rust写的构建工具,和rspack差不多,兼容vite插件。不过在编译js这块,还是用的SWC。

重复的轮子太多了,未来我不太看好,估计作者写个一两年,发现没人用就弃坑了把。

parcel

周下载量14万。

一个上古时期的轻量化打包器,不过放在现在也没什么优势了,估计也是慢慢走下坡路。

snowpack

周下载量1万2。

前两年还火一阵子,但是随着各种各样的打包工具的出现,鱿鱼溪选择了vite,而snowpack本身也没什么优势,非常尴尬,作者就弃坑了。已经两年没更新了。

纠正一下网络上的错误

发现在谈论打包工具的时候,很多人会习惯性的把webpack和vite做对比,实际上工具链是工具链,打包工具是打包工具,两者还是不太能混为一谈的。毕竟vite只是整合了esbuild和rollup,本身没有做打包的事情。就连vite的官网都宣称自己是下一代的工具链,而非打包工具。这玩意就像是我整合了webpack,写了一个脚手架,然后说是写了一个打包工具一样别扭。

SWC是和babel平级的,SWC只处理js/jsx等相关的js文件,正如我们只会称babel为js编译器,而非打包工具一样,SWC也只是js编译器而非打包工具。

相关推荐
2401_878454533 小时前
浏览器工作原理
前端·javascript
by__csdn5 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
一条可有可无的咸鱼5 小时前
企业招聘信息,企业资讯进行公示
java·vue.js·spring boot·uni-app
Luna-player6 小时前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
lionliu05196 小时前
js的扩展运算符的理解
前端·javascript·vue.js
小草cys6 小时前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
前端一小卒8 小时前
一个看似“送分”的需求为何翻车?——前端状态机实战指南
前端·javascript·面试
syt_10138 小时前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
长安牧笛8 小时前
儿童屏幕时间管控学习引导系统,核心功能,绑定设备,设时长与时段,识别娱乐,APP超时锁屏,推荐益智内容,生成使用报告,学习达标解锁娱乐
javascript
老前端的功夫8 小时前
Vue 3 vs Vue 2 深度解析:从架构革新到开发体验全面升级
前端·vue.js·架构