前端构建工具的未来

article/2025/11/4 3:19:41

本文作者系360奇舞团前端开发工程师

本文为翻译
原文标题:The Future Of Frontend Build Tools
原文作者:Alexander Joseph
原文链接:https://www.smashingmagazine.com/2022/06/future-frontend-build-tools/

前端构建工具对现代前端开发者的工作流程至关重要,原因有很多,包括改善开发者和用户体验。从开发者的角度来看,前端工具为我们提供了:编写模块的能力、用于本地开发的开发服务器、在开发模式下缩短反馈循环的热模块替换(HMR)、使用polyfills针对传统浏览器的能力、处理除JavaScript以外的一系列文件类型,等等。

因此,用户可以享受能力更强、功能更丰富的应用程序,通过代码分割、缓存、预取和其他资源优化技术保持性能--有些应用程序甚至能够离线工作。

今天,前端工具为我们提供了如此多的东西,以至于很难想象曾经有一段时间甚至根本不需要它。回忆一下,可以帮助我们理解我们是如何走到今天的。

过去

在前端应用程序变得像今天这样复杂之前,所有的JavaScript都是用来为其他简单的HTML文档添加基本的交互性--类似于Adobe的Flash的使用方式。

当时没有复杂的 "JavaScript-heavy "应用,因此不需要任何工具来更好地编写和发布 JavaScript,但这种情况不会一直存在。

随着时间的推移,我们开始在网络上创造更多的用户体验,我们从更多的静态网页转向服务于用户特定数据的高度动态网络应用。这些应用程序比传统的应用程序需要更多的JavaScript,而使用JavaScript的局限性也变得更加明显。

在浏览器中加载JavaScript有两种主要方式:一种是用脚本标签引用JavaScript文件,另一种是在HTML中直接将JavaScript写入脚本标签。

<script src="my-javascript-file.js"></script><script>var a = 1;var b = 2;var result = a + b;
</script>

当你有大量的JavaScript需要加载时,这种对加载JavaScript的限制就会成为一个瓶颈。同时加载许多JavaScript文件有浏览器的限制,而拥有一个巨大的JavaScript文件也有可维护性的问题(比如文件大小、范围问题、命名空间冲突等等)。

我们想出了一些解决方案,如立即调用函数表达式(IIFEs),以帮助解决封装和一些范围问题,之后,我们获得了在许多不同文件中编写JavaScript的能力。然后,我们需要一种方法,将这些文件合并成一个文件,在浏览器中提供服务。

现在

由于能够用IIFEs将我们的JavaScript分割成不同的文件,我们似乎只需要一种方法将这些文件串联起来,并将一个文件传送给浏览器。在这种需求下,Gulp、Grunt、Brocolli等工具应运而生。然而,我们很快意识到,我们的想法可能有点太简单了。

随着我们的应用程序变得更加复杂,缺乏无用代码消除、针对小更改的完全重建以及其他性能问题等问题让我们意识到我们需要的不仅仅是串联。这催生了更现代的打包工具,如 Webpack、Parcel 等。

随着前端领域的进步步伐没有放缓,我们已经开始观察到现代构建工具的差距和问题。

一些主要的局限性包括:

  • 对其中一些现有的 bundlers 进行复杂的设置和配置;

  • 随着应用程序的迭代,构建时间也随之增加;

  • 开发模式下的性能欠佳。

在JavaScript生态系统中,事物变化的速度往往让人感到疲惫,但好处是社区能迅速发现问题并着手解决潜在的解决方案。我们的目标是提高前端工具的性能,新一代的构建工具正在开发中。

未来

由于当今主流构建工具的限制,出现了许多重新构想前端构建工具的尝试,而且目前市面上有相当多的新型构建工具。

仔细观察会发现,这些新工具似乎采取了两种主要方法来解决这个问题(并不一定是相互排斥的):平台的改变和范式的转变,这两者都受到了Web开发生态系统中的新进展的推动。

平台的改变

传统上,前端构建工具一直是使用JavaScript,近年来也使用了TypeScript进行构建。这是有道理的,因为JavaScript是Web的语言,使用相同的语言编写Web构建工具可以更容易地让更多人参与其中,并在这些工具周围建立社区。然而,这种方法也存在固有的问题。

作为一种高级语言,JavaScript 无法达到原生的性能水平。这意味着构建在该平台之上的工具对其性能有限制。因此,为了突破这一限制,新的构建工具正在构建在较低级别、本质上性能更高的语言(如 Rust)上。

像Rust和Go这样的语言已经成为编写下一代构建工具的热门选择,它们非常强调性能。特别是Rust,不仅因其性能而受欢迎,还因其令人印象深刻的开发者体验而受欢迎在Stack Overflow开发者调查中连续六年被评为 "最受喜爱的 "编程语言。

在谈到用Rust构建 Rome(一个用于构建现代 JavaScript 应用程序的一体化工具链)的决定时,Jamie Kyle说:

“许多其他人已经在我们面前传达了 Rust 的性能、内存和安全优势——让我们说,每个曾经说过 Rust 很好的人都是正确的。然而,我们最担心的是我们自己的生产力。[...] 然而,经过一些原型设计后,我们很快意识到我们实际上可能在 Rust 中更有效率”
Jamie Kyle in Rome Will Be Written In Rust

SWC项目处于将 Rust 用于前端构建工具这一想法的最前沿。它现在正在为 Next.js 的新编译器、Deno、Parcel 等项目提供支持,其性能比其他现有构建工具高出多个数量级。

像 SWC 这样的项目证明,随着底层平台的改变,构建工具的性能可以得到显着提高。

范式的转变

如今,典型的前端构建流程如下:您可以在许多不同的文件中编写JavaScript模块,然后运行一个命令,构建工具会收集这些模块,将它们捆绑成一个单独的模块,将其转换为浏览器可理解的格式,并在浏览器中提供该文件。

为了提高开发模式下的性能,许多需要较长时间才能完成的优化被省略,而是在打包生产应用程序时运行,这样可以确保启动开发服务器、在开发模式下运行应用程序并提高生产效率所需的时间尽可能短。

虽然构建过程仍然需要相当长的时间,但随着项目规模的增长,构建时间(甚至在开发过程中)只会变得越来越长。如果我们能够在仍然可以像往常一样编写模块的同时跳过打包过程,并让浏览器理解如何处理它们,那将是非常棒的,对吧?一些新的构建工具在使用这种方式,并称之为 Unbundled Development

Unbundled Development 很棒。它解决了现有构建工具的一个主要问题:即使是微小的代码更改,它们通常需要重新构建整个应用程序的部分,而随着应用程序的增长,构建时间也越来越长,这失去了快速反馈——这是愉快的开发体验所必需的。

有人可能想知道,如果 Unbundled Development 如此出色,为什么今天不成为常态呢?Unbundled Development 才开始受到关注有两个主要原因:现代浏览器对于最新功能的兼容性和处理节点模块导入的方式。

1. 现代浏览器的兼容性

Unbundled Development 由 ES 模块 (ESM) 提供支持,它为 JavaScript 带来了标准化的模块系统——在包括浏览器在内的多个运行时中得到原生支持。有了这个新功能,我们可以将我们的脚本标记标记为模块,因此可以使用我们都熟悉的import和关键字;export

<script type="module" src="main.js"></script><script type="module">/** JavaScript module code goes here */
</script>

ES 模块已经存在了很长一段时间。尽管如此,我们只能开始将它用于 Unbundled Development 之类的事情,这主要是因为它的标准化在网络生态系统中的所有参与者中花费了很长时间。

在她关于 ES 模块的文章中,关于 Mozilla Hacks,Lin Clark 说:

“ES 模块为 JavaScript 带来了一个官方的、标准化的模块系统。不过,这需要一段时间才能实现——将近 10 年的标准化工作。”
Lin Clark在ES Modules: A Cartoon Deep-Dive

浏览器支持与否的问题长期以来一直困扰着前端开发。这就是为什么我们有供应商为我们的 CSS 加上前缀,有时是 polyfill 的原因,为什么我们花时间确保我们的 Web 应用程序的跨平台支持,以及为什么有时需要相当长的时间才能利用最新和最好的 Web 功能在我们的日常工作中。

尝试使用 Safari 访问StackBlitz项目,您将看到以下屏幕,表明非基于 Chromium 的浏览器不支持 WebContainers。

a0006434e53fd9e8cf3cd196dd4bf8fc.jpeg

各个浏览器提供商实现新功能的时效并不相同,而且不同供应商实现某些功能的方式通常也有所不同。然而,在Interop 2022等举措,未来看起来一片光明。

2.处理节点模块导入

我们今天编写的大多数(如果不是全部)前端应用程序都依赖于 NPM 的外部库。对于典型的 React 应用程序,我们会在组件文件的顶部导入 React,如下所示:

import React from 'react'/** The rest of your component code */

尝试直接在浏览器中加载它,就像我们在 Unbundled Development 中需要做的那样,会导致两个问题。首先,浏览器不知道如何解析要查找的路径react,其次,react 库作为 Common JS (CJS) 模块发布——如果不进行一些预处理,它无法在浏览器中本地运行。

后者才是更大的问题,因为将我们的Node模块导入替换为指定文件的相对路径是可能的,甚至是微不足道的。然而,由于大多数NPM包是以适用于Node.js而不是浏览器的模块格式编写的,这就要求我们特殊处理NPM依赖项,以促进 Unbundled Development。

特别是Snowpack,它通过将应用程序的依赖项处理成单独的Javascript文件,然后可以直接在浏览器中使用。关于Snowpack如何做到这一点的更多信息可以在这里找到。

随着 ES 模块现在成为大多数现代浏览器的主流,以及 NPM 依赖项的巧妙解决方法,像Vite和Snowpack这样的构建工具可以提供 Unbundled 开发的选项,除了超快的 HMR 之外,还可以显着提高性能、快速构建。

最后的思考

前端开发已经走过了漫长的道路,我们的需求也在不断发展和增加复杂性。构建工具是我们构建前端应用程序的重要组成部分,而现有工具还没有达到标准,这激发了新工具的开发,这些新工具重新构想了构建工具的设计方式。

下一代构建工具非常注重性能、易用性和不太复杂的配置,有望在未来一段时间内为雄心勃勃的前端应用程序提供支持。

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

cb62ea453e5bc8c07ea2738830466255.png


http://chatgpt.dhexx.cn/article/knvN5eJi.shtml

相关文章

对前端构建工具的一些理解

前言 最近有幸在前端团队里面做了一次关于 webpack 的技术分享。在分享的准备过程中&#xff0c;为了能让大家更好的理解 webpack&#xff0c;特意对市面上以前和现在流行的构建工具做了一个梳理总结。在整理和分享的过程中&#xff0c;获益匪浅&#xff0c;对前端构建工具有了…

前端构建工具大盘点:gulp、webpack、vite、rollup、esbuild、snowpack、babel、parcel、swc、tsc

文章目录 背景分类转译器打包器 对比gulp VS webpackBundle vs Bundleless&#xff08;代表就是webpack VS vite&#xff09;其他比较 个人理解总结官网 背景 做前端也有好多年了&#xff0c;从最早的 jQuery 时代到现在的三大框架&#xff0c;这过程中用到了很多构建工具&…

前端程序员常用的9大构建工具

构建工具是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk)。构建包括编译、连接跟把代码打包成可用的或可执行的形式。 在小型项目中&#xff0c;开发者往往手动调用构建过程&#xff0c;这样在大型的项目中很不实用&#xff0c;在构建过程中难以跟…

Git入门指南二:初次运行Git前的配置

Git入门指南二:初次运行 Git 前的配置 初次运行 Git 前的配置 Git 提供了一个叫做 git config 的工具&#xff0c;专门用来配置或读取相应的工作环境变量&#xff0c;正是由这些环境变量&#xff0c;决定了 Git 在各个环节的具体工作方式和行为。 这些变量可以存放在以下三个…

Linux下使用Git入门

什么是版本控制 简单理解就是把文件每次的修改都记录下来&#xff0c;包括最初的一个版本。 在gitee上创建一个仓库 这样仓库就创建好了 gitclone 把仓库克隆到本地目录下 先选择一个目录来存放我们的仓库目录 然后把这个仓库的路径给复制上 在对应的目录下输入指令git …

Git入门级教程(轻松上手)

Git入门以及在Idea中集成使用Git 前言&#xff1a;当我们在团队开发的时候&#xff0c;我们需要一个工具来协同进行项目的完成&#xff0c;这个工具就是git。此博客内容是自己学习的笔记&#xff0c;我认为知道这些便可以轻松使用git了。 Git就是一种分布式版本控制系统 1.安装…

Git入门学习教程

Git学习 文章目录 Git学习1.简介2.工作流程图3.安装3.1 常用指令 4.环境配置4.1 查看配置4.2 配置用户名&#xff08;必须&#xff09;和邮箱 5.创建仓库6.基础操作指令6.1 查看状态&#xff08;status&#xff09;6.2 添加工作区到暂存区&#xff08;add&#xff09;6.3 提交暂…

【Git从入门到精通】Git入门

什么是版本控制 版本控制是一套系统&#xff0c;按时间记录某一个或一系列文件的变更&#xff0c;查看以前的特定版本。 使用版本控制系统&#xff0c;你可以将文件或者整个项目恢复到先前的状态&#xff0c;还可以对以前的文件进行对比。 本地版本控制系统 本地版本控制系…

Git入门看这一篇就够了

老规矩&#xff0c;在学习前我们先看一下学习框架&#xff1a; Tip: Git分支内容较多就放在另一篇文章中啦 目录 Git起步——版本控制 版本控制软件 版本控制软件的好处 版本控制软件的分类 Git基础 Git基础 Git中的三个区域 Git中的三种状态 基本的Git工作流程 安装…

Git入门级教程

文章目录 一.Git概述?1.什么是Git?2.通过git我们可以&#xff1a;3.Git工作流程图4.工作区、暂存区、版本库 概念5.Git的下载与安装6.Git代码托管服务 二.Git常用命令1.Git全局设置2.获取Git仓库&#xff1a;4.本地仓库操作常用命令5.远程仓库操作的常用命令5.1配置SSH钥6.分…

Git入门起步

一、关于版本控制 1.1、概念 版本控制软件&#xff1a;是一个用来记录文件变化&#xff0c;以便将来查阅特定版本修订情况的系统&#xff0c;因此有时也叫做“版本控制系统” 通俗的理解&#xff1a;把手工管理文件版本的方式&#xff0c;改为由软件管理文件的版本&#xff1b…

git新手入门教程

git在日常开发是经常用到的工具&#xff0c;也是程序员必备的技能之一。下面是一篇git的新手快速入门。 git的下载地址&#xff1a;https://www.git-scm.com/download/ 上面是一张简易的git流程图&#xff0c;下面讲讲git操作的基本命令行。 git clone $ git clone 地址 …

Git入门到精通全套教程

[声明:此文章为观看尚硅谷系列课程后本人手打整理课件] 第一章 Git概述 git是一个免费&#xff0c;且开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小到大的各种项目 git易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库,方便的暂存区域…

git 入门

git入门 一、下载安装 git官网地址Git - Downloads 二、提交仓库 1. 用户配置 $ git config --global user.name "Your Name" $ git config --global user.email "emailexample.com"name与"有空格 2. 创建文件夹,查看当前地址,创建仓库 $ m…

Git入门操作

Git简介 Git分有工作区&#xff0c;暂存区&#xff0c;本地库 Git具体命令 1. 初始化 命令&#xff1a; git init首先新建一个文件夹&#xff0c;把他当作我们要用git来管理的一个项目文件。右键点击GitBashHere 会弹出一个命令框&#xff0c;我们执行git init 这代表我…

git入门(必看)

git入门 git简介 文章目录 git入门git简介版本控制系统发展可以分为三个阶段&#xff1a; Git 的诞生Git 诞生的背景Linus 两周完成 GitGit 的发展壮大 git安装在 Windows 上安装在 macOS 上安装在 Linux 上安装 Git环境配置配置用户名和邮件地址检查配置Git 颜色配置Git忽略文…

git快速入门

背景 git作为现在最为流行的版本管理系统&#xff0c;大部分公司都使用git进行版本控制&#xff0c;并且最大同性交友网站github也是在git的基础上建立的。 很多人认为git难&#xff0c;在于它的一些概念与之前流行的集中化的版本管理系统有所出入&#xff0c;只要通过熟悉gi…

Git从入门到精通

集中式与分布式中心服务器工作流分支实现冲突Fast forward分支管理策略储藏&#xff08;Stashing&#xff09;SSH 传输设置.gitignore 文件Git 命令一览参考资料 # 集中式与分布式 Git 属于分布式版本控制系统&#xff0c;而 SVN 属于集中式。 集中式版本控制只有中心服务器拥…

Git快速入门(图文教程)

前言&#xff1a; Git是目前最流行的版本控制工具之一&#xff0c;它可以帮助我们更好地管理代码&#xff0c;协作开发&#xff0c;以及保证代码的安全性。在学习Git之前&#xff0c;我们需要先了解几个概念&#xff1a; workspace&#xff1a;工作区&#xff0c;即我们正在进…

史上最简单的Git入门教程

1. 版本控制系统简介 1.1 何为版本控制 版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变&#xff0c;文件的版本号都将增加。除了记录版本变更外&#xff0c;版本控制的另一个重要功能是并行开发…