关于 Webpack 使用 Babel 与 Vite 使用 ESBuild 的一些思考

关于 Webpack 使用 Babel 与 Vite 使用 ESBuild 的一些思考
Photo by Dean Pugh / Unsplash

虽然 Vite 是基于 esbuild 构建的,并且 esbuild 在构建速度上有显著优势,但 Webpack 目前并没有直接使用 esbuild 构建的原因涉及多个方面,主要是 架构设计差异功能需求兼容性 等问题。下面是一些关键的原因:

1. Webpack 的复杂性与扩展性

Webpack 的高度可扩展性:Webpack 的设计目标是一个 高度可配置和可扩展的打包工具。它提供了丰富的插件和 loader 机制,支持各种复杂的构建需求(如代码分割、热更新、各种资源处理等)。这些功能要求 Webpack 必须具备更细粒度的控制能力,而 esbuild 的设计理念相对简化,主要关注高速构建和基本的模块转换功能。

Loader 和 Plugin 系统:Webpack 的强大之处在于其 loaderplugin 系统,允许开发者定制几乎每一个构建步骤。虽然 esbuild 也支持一些插件,但它的插件系统远不如 Webpack 灵活。因此,迁移到 esbuild 后,可能需要做大量的改造工作,甚至失去 Webpack 的一些优势。

2. 功能差异与优化目标

构建优化的侧重点不同

Webpack 专注于处理复杂的构建需求,如按需加载、动态导入、复杂的资源处理(比如 CSS、图片、字体的优化等)。它支持各种构建优化,包括代码分割、懒加载、tree shaking 等,能让大型应用的构建更加灵活和高效。

esbuild 的目标是 极致的构建速度,它的设计更注重 原生支持 JavaScript 的转换,例如将 TypeScript 转换为 JavaScript、代码压缩和模块解析。虽然 esbuild 对一些任务(如构建速度和压缩)有显著优势,但它缺少 Webpack 在处理资源、插件和复杂构建逻辑时的深度定制能力。

功能集成:Webpack 本身不仅仅是一个打包工具,它提供了许多内置的功能,例如 HMR(热模块替换)、代码拆分、模块联邦(Module Federation)等,这些功能是通过复杂的插件和中间件机制实现的。而 esbuild 在设计时并没有考虑这些功能,它专注于打包和转译,因此在 Webpack 中实现这些高级功能时,可能无法直接依赖 esbuild。

3. 插件和生态差异

Webpack 生态系统:Webpack 拥有一个庞大的插件生态,很多前端开发中的功能(例如代码压缩、图片优化、CSS 预处理器等)都有现成的插件支持。而 esbuild 的插件生态相对较新,虽然也在快速发展,但与 Webpack 的成熟生态相比,仍有一定差距。如果 Webpack 完全迁移到 esbuild,它就可能失去很多现有插件的支持,尤其是在处理复杂资源和高级功能时。

兼容性问题:Webpack 需要兼容各种不同的加载器(如 Babel、Sass、TypeScript 等)和插件,这需要一个高度灵活的架构。esbuild 虽然在速度上表现优秀,但它的插件和配置机制相对简化,在一些场景下可能无法满足 Webpack 的需求,尤其是当涉及到复杂的资源处理和定制化构建时。

4. 逐步优化与平衡

兼容性和迁移成本:虽然 esbuild 提供了高效的构建速度,但 Webpack 在项目中积累了大量的配置和插件,因此如果完全转移到 esbuild,可能需要对现有的构建系统进行大规模的改造。这不仅会导致迁移成本高,还可能影响现有项目的稳定性。

性能优化方式不同:Webpack 更倾向于通过 增量构建、缓存、代码分割等手段 来优化构建性能,而 esbuild 是通过 极度优化的构建引擎 来加速构建。这两者的优化方式不同,所以即便 esbuild 在某些任务上有明显优势,Webpack 仍然通过其他手段保持其在大型项目中的高效性。

5. 未来可能的结合

• 虽然 Webpack 目前没有使用 esbuild 作为构建核心,但 Webpack 5+ 实际上已经在某些构建任务中开始 集成 esbuild,特别是在 JavaScript 和 TypeScript 编译的速度上。例如,Webpack 通过 esbuild-loader 插件,允许开发者在 Webpack 中使用 esbuild 作为 JavaScript 编译器,以加快构建速度。这是两者结合的一个例子,通过结合 Webpack 的灵活性与 esbuild 的高性能,开发者可以获得更好的构建体验。

未来可能的整合方向:Webpack 和 esbuild 各自有自己的优势,未来可能会有更多的集成方式,将 esbuild 的速度优势和 Webpack 的功能性优势结合起来,既保留 Webpack 的扩展性,又能利用 esbuild 的构建速度。

总结

Webpack 和 esbuild 的设计目标和功能重点不同:Webpack 侧重于灵活性、功能丰富的构建系统,适用于复杂的项目需求;而 esbuild 则专注于极致的构建速度和基本的模块转换,因此两者在架构和实现上存在差异。

Webpack 目前并不直接使用 esbuild,是因为它需要处理更多复杂的构建任务和插件生态,而 esbuild 在这些方面还不如 Webpack 灵活。

• 然而,Webpack 可以通过插件如 esbuild-loader 集成 esbuild,从而在不完全迁移的情况下,享受 esbuild 提供的高效构建性能。

因此,虽然目前 Webpack 并不完全基于 esbuild 构建,但未来可能会继续整合 esbuild 的优势,同时保持 Webpack 的灵活性和强大的插件支持。

Read more

AI 时代的一次远程面试经历

AI 时代的一次远程面试经历

今天聊了一个远程面试,记录一下自己的感受: 负责人也是技术出身,刚好负责两个团队,一个在美国做 AI Startup,还有一个在香港做软件开发,所以我们直接约了个群聊,相互介绍了团队和自己在当前节点的状态,以及对这个职位的预期 我对这两种业务模式都有兴趣,相当于是一次性参加了两个面试了: AI Startup 这种模式,我刚好在 23 年的时候,跟微软和字节的朋友一起做 AI 电商创业,当时从立项,研发逐步推进,MVP 构建,VC 融资,市场营销方面跟了下来,学习到了非常多的东西 而外包业务,我在很多年前就开始做一些副业,与甲方沟通需求,自己找 UI ,测试的成员组队,可能与多数人不同的是,我对外包项目的接受度很高(这里说的不是传统的如中软,东软那样的外包团队),而是创业型的外包公司,这种环境下,是真的可以在技术、业务、商务、业务视角学到很多。 远程面试一般比较直接,大家都直奔主题,能够迅速感知到候选人和团队的契合程度,在

郑州互联网薪资统计及 AI 时代的现状

郑州互联网薪资统计及 AI 时代的现状

22 年郑州前端薪资真实统计(200+份样本) 22 年我在郑州前端大群里面统计了一波郑州互联网薪资,当时以为只是开始,想着后面会有更多的企业来到郑州,情况会越来越好,而现在回头来看,没想到那时才是顶峰。 当时在群里面收集到 200+ 位投票,匿名填写自己的薪资情况,当时跟大家特意强调了要保证数据的真实性,也找群员验证过,基本真实性可信: * 🐣 3-6k 占比不少,主要是郑州的工资水平低,对于刚出来的,在小公司的这个薪资也正常,实习生 or 小作坊 * 🐰 6-12k 的占大多数,涵盖了郑州本土大多数互联网公司的薪资范畴,大多数的常规业务开发 * 🐵 12-20k 主要集中在本土大公司、一线城市在郑州的研发团队、外包公司,核心业务开发人员 🦄 20k+ 高学历 or 有大厂经验,主要为本土大公司或者一线公司在郑州的带队 leader ,能力较强,一般承担一些管理角色。 25年:职场寒冬来袭,状况还在持续恶化 一线公司研发部门的撤离 这也是我最在意的一条: 之前有一些一线城市的研发交付部门会在郑州有成立研发交付中心,从疫情之后,

RAG不是万能的,附常见误解与澄清

RAG不是万能的,附常见误解与澄清

能给人理清目前 AI 在生产落地的问题,是一件难能可贵的事情,AI 在生产落地会有哪些阻碍的讲解,讲干货的真的是很少,至少我自己曾经在这个问题上困惑了很久。 因为之前我在 AI 电商团队,做具体的 AI Sass 落地的时候,团队经常会沟通做到生产级可用的 AI,需要哪些东西,大概的门槛还是了解到一些的,我的能力也顶多在应用层面去做一些工作量的定制与代码衔接,涉及到模型层面,一概歇菜,很多人估计只是想着,写一个 Prompt ,就是真正的拥抱 AI 了。 当我看到自媒体里面铺天盖地的在讲 AI 如何帮助企业提效,如果重塑行业的时候,有种很复杂的感觉,他们真的懂 AI 吗,甚至他们真的懂软件吗? 基本上现在大家接触到的方式就几种: * 割韭菜卖课,讲概念,前景,这些基本上都是拿别人的产品来给自己做嫁衣,自己顶多是个工具的使用者和营销者,比如用 Midjourney,Kimi,豆包,海螺什么的,告诉大家用了就能提效,获得流量,

Shopify 构建商城页面的几种方式

Shopify 构建商城页面的几种方式

当用户需要对 Shopify 商城页面有自定义的需求时,一般会选择: 1、直接使用官方商城的 theme 来构建,可以使用,但是免费模板较少,只有 13 个。 2、使用第三方 theme 来构建,也有很多的模板可以选择,比如 envato 上有数百个 shopify 的模板,这是个非常大的市场。 3、完全自定义开发,自由度最高 当用户对 Shopify 商城页面,有完全自定义的需求,通常是常规主题无法满足需求,推荐使用 Shopify Hydrogen 的官方方案,开发人员可以对商城进行完全的页面级别的自定义。 而对于开发人员来说,官方的 Shopify Liquid 开发起来的效率和体验,是不如 Shopify Hydrogen 来的舒服,而且使用 Shopify Hydrogen ,还可以对性能有提升,