前端工资涨不上去?可能是你没掌握构建工具:关于 Webpack、Babel、esbuild、Vite、Rollup、Parcel、SWC......的那些事

简介: 前端工程化,是每一个高级前端开发人员都必须要去深入了解的内容,这也是想要拿到高薪不可避免的一个关键因素。

每个前端都应该掌握构建工具

大概从 2019 年到现在的这三年多的时间里,构建工具几乎已经成为前端发展最快的一个部分。

构建工具,属于前端工程化领域。而前端工程化,是每一个高级前端开发人员都必须要去深入了解的内容,这也是想要拿到高薪不可避免的一个关键因素。

在我过往的工作中,接触和面试过具备 5 年+工作经验的前端开发人员要超过 200 位,有一部分人对前端工程化的理解和实践比较深刻,所以他们可以比较容易的通过一些高级别的面试。但仍然有相当多一部分人对这块知识存在很多盲区,以至于他们在职业的道路上无法走的更轻松。

前端构建,就像是通往高手之路上的一个屏障,早晚都需要迈过去。

这篇文章会介绍目前大部分关注度较高和主流的构建工具。将它们彼此的关系梳理清楚,方便你能够更好的认清楚它们,进而有针对性的去学习和使用。

转译器与打包器

首先这些构建工具的侧重点不同、作用也不一样,所以说它们并不全部都是竞争关系,相反,某些构建工具之间反而是相互依存的关系。

它们大多都在转译器和打包器之间,但是很多构建工具的能力范围都不仅仅是单纯的转译器或者打包器。

转译器很好理解,就是将一种高级编程语言转换翻译成另一种高级编程语言,比如 TypeScript 转译到 JavaScript。这个过程和汉语翻译成英语差不多。

打包器也很好理解,就是将项目中用到的各种类型的资源进行打包,比如 SASS、PNG、JSON 等,让它们能够在指定的环境中正常工作,比如浏览器或者 Node.js。

我将构建工具简单地分为两类:

  • 底层 JS/TS 转译器:纯粹用于将 TypeScript/JavaScript/JSX 编译到某种特定运行环境下的底层转译器,代表有 Babel、TSC、esbuild 和 SWC 等。虽然我将它们归类为转译器,但是它们大都也支持打包的能力,比如 esbuild 就把自己定位为打包器。
  • 上层打包器:它们通常不会具备转译能力,而是借助上面提到的这些转译器来实现转移能力。它们更专注于完成一些范围更广、更加具体的打包任务。代表有 Webpack、Rollup、Parcel、esbuild、Snowpack、Vite、wmr、microbundle、tsup、tsdx、tsup 等。

发展迅猛的因素:痛点

前端工程化发展这么快的原因,大概就是因为前端应用越来越复杂,对应的痛点也越来越多。每种工具其实都在某个或者某几个痛点上面下功夫,最终都是在不断解决各种痛点。

构建通常有分两种情况,本地开发时的构建和线上部署时的构建。

本地开发时构建首要追求的是速度。很多人会去吐槽 Webpack 很慢。

线上部署时构建首要追求的是体积。很多人会去吐槽 Webpack 打包体积过大。

当然还有一些和构建环境无关的其他痛点:比如说配置复杂度。很多人会自嘲自己是 Webpack 配置工程师。

因为 Webpack 和 Babel 是业内最老牌的构建工具之一,所以很多工具在一开始都会去挑战 Webpack 和 Babel。

这也就是营销学中的蹭流量,拿自己的产品和业内最强的产品做对比,从而达到提高自身价值和知名度的目的。就像各大安卓手机碰瓷苹果;各大电动车去碰瓷特斯拉一样。

esbuild 在碰瓷各大打包器。

SWC 也在碰瓷 Babel。

连现在如日中天的 Vite 也不例外。

转译器

转译器可以分为两类,一类是基于 JavaScript/TypeScript 实现的,另一类是使用其他语言实现的。

传统转译器

在转译器中,最老牌的是 babel,同样它的生态也是最好的。但是它是基于 JavaScript 实现的转译器,在性能上存在瓶颈。

tsc 是 TypeScript 的官方编译工具,它是基于 TypeScript 实现的,性能同样存在瓶颈。

其他语言实现的转译器

esbuild 和 SWC 在性能方面都很有优势,原因是它们采用了性能更好的编程语言。

esbuild 采用的是 Go 语言,所以在性能上和 Webpack 比较算是降维打击了。

SWC 采用的是 Rust 语言,性能同样和 Babel 不在一个纬度上。

我们可以看到,前端的底层的技术方向在逐渐向 Rust 和 Go 迁移。因为这两门语言在性能上存在很大的优势。

打包器

上文中有提到,打包器的使用场景有两种,分别是开发场景和部署场景。部署场景频次比较低,所以性能对这类场景来说不是最重要的。但是对开发场景非常重要,没有人愿意修改一次代码要等几分钟才能看到效果。

按照开发场景的视角出发,打包器也可以分为两类,一类是通过监听源代码变化然后重新构建项目将打包后的代码推送到浏览器的传统模式。另一类是通过浏览器的原生 module 来实现动态打包的 bundleless 模式。

传统打包器

Webpack 在现代打包器中资历最老,同样生态也最好。在目前的前端生态中,仍然有大量的项目是采用 Webpack+Babel 技术方案进行打包构建的。它会采用大量缓存技术来提高性能。

Rollup 通常用来打包第三方库,而不是应用。它比 Webpack 生成的代码更加精简。

Parcel 和 Webpack 的功能类似,但是它简化了配置,号称零配置、开箱即用。Parcel 2 的 JS 转译器部分基于 SWC 进行开发,性能有很大提升。

bundleless 打包器

Snowpack 是最早的 bundleless 打包器之一,它最大的特点就是闪电般的速度。最终部署它会使用 Webpack/Parcel 插件。但是在 2022 年 4 月,负责它的团队已经不再积极维护它了,因为他们去开发 Astro 了。

Vite 和 Snowpack 类似,也是以速度著称,打包部分使用 Rollup,所以最终部署时打包体积相比 Snowpack 会更小。由于积极维护,和很好的生态,目前 Vite 也是首选的 bundleless 解决方案。

wmr 是一个非常轻量级的打包工具,它没有任何 npm 依赖。所以它没有 Snowpack 和 Vite 成熟,但是 wmr 更适合用在 Preact 或者一些简单的项目上,因为它的作者也是 Preact 的作者。

TypeScript 打包器

除了上述的两种类型打包器以外,还有一类是专门针对 TypeScript 的打包器。

TSDX 是比较成熟的一个选项,但是它对自身的定位不是一个打包器那么简单,而是覆盖了一个 TypeScript 项目开发时所需的所有东西的零配置 CLI:Rollup、Jest、tsc、yarn、TSLint、VSCode......,有点 All in One 的感觉。有些人喜欢这一点,也有些人反对这一点。

tsup 是另一个针对 TypeScript 的打包器,它的优势也是零配置,并且底层是使用 esbuild 作为支持的。相比于 TSDX 在速度上可能会更快,功能就没有那么多了。

总结

前端构建工具虽然很多,但是它们有着唯一的目标,那就是改善开发人员体验。

目前所有的前端构建工具在最终构建产物上基本不会有太大差异,目前最大的痛点还是在于开发时的性能上,其次是配置复杂度。

由于篇幅所限,后续会针对每种工具进行单独讲解。

相关文章
|
3月前
|
缓存 前端开发 JavaScript
Webpack与Babel的进阶配置与优化
通过以上的进阶配置和优化策略,可以更好地发挥`Webpack`与`Babel`的功能,提高项目的性能和开发效率。
|
3月前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
102 6
|
3月前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
107 7
|
3月前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
92 2
|
3月前
|
前端开发 JavaScript 开发工具
Vite 4.0 发布,下一代的前端工具链
【10月更文挑战第21天】Vite 4.0 的发布标志着前端开发领域的又一次重要进步。它为开发者带来了更高效、更智能、更具创新性的开发体验,正逐渐成为下一代前端工具链的引领者。
|
4月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
302 14
|
4月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
83 0
|
4月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
4月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
101 1
|
4月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
218 1

热门文章

最新文章

  • 1
    Webpack 插件底层的实现原理是什么?
  • 2
    【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
  • 3
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 5
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 6
    详解智能编码在前端研发的创新应用
  • 7
    巧用通义灵码,提升前端研发效率
  • 8
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 9
    智能编码在前端研发的创新应用
  • 10
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 1
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    23
  • 2
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    43
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    24
  • 4
    巧用通义灵码,提升前端研发效率
    83
  • 5
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    137
  • 6
    详解智能编码在前端研发的创新应用
    91
  • 7
    智能编码在前端研发的创新应用
    75
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    35
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    108
  • 10
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    73