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

article/2025/11/3 7:55:49

在这里插入图片描述

前言

最近有幸在前端团队里面做了一次关于 webpack 的技术分享。在分享的准备过程中,为了能让大家更好的理解 webpack,特意对市面上以前和现在流行的构建工具做了一个梳理总结。在整理和分享的过程中,获益匪浅,对前端构建工具有了新的认识。在这里,将自己的一些思考总结写出来,希望也能给到对构建工具同样感兴趣的同学一点帮助。

构建工具的前世今生

谈到构建工具,大家首先想到的肯定就是 Webpack 以及现在最🔥的 ViteWebpack,功能强大,生态丰富,从面世到今天,一直是很受大家欢迎;Vite 采用 unbundle 构建模式,带来了极致的开发体验,给开发人员以新的选择。

在这两个构建工具之外,还有其他的构建工具,如和 WebpackVite 类似的 RollupParcelEsbuild,自动化构建工具 gruntgulp,以及更加久远的 YUI Tool

这些工具的存在,构成了前端构建工具的发展史。

YUI Tool + Ant

YUI tool 是 07 年左右出现的一个构建工具,功能比较简单,用于压缩混淆 cssjs 代码,需要配合 javaAnt 使用。

当时 web 应用开发主要采用 JSP,还不像现在这样前后端分离,通常是由 java 开发人员来编写 js、css 代码,前端代码都是和后端 java 代码放在一起的。因此前端代码的压缩混淆也就基于 java 实现了。

Grunt / Gulp

Grunt / Gulp 都是运行在 node 环境上的自动化工具。

在开发过程中,我们可以将一些常见操作如解析 htmles6 代码转换为 es5less / sass 代码转换为 css 代码代码检查代码压缩代码混淆配置成一系列任务,然后通过 Grunt / Gulp 自动执行这些任务。

GruntGulp 的不同点:

  • 使用 Grunt的过程中,会产生一些中间态的临时文件。一些任务生成临时文件,其它任务可能会基于临时文件再做处理并生成最终的构建后文件,导致出现多次 I/O
  • Gulp 有文件流的概念,通过管道将多个任务和操作连接起来,不会产生临时文件,减少了 I/O 操作,流程更清晰,更纯粹,大大加快了构建的速度。

Webpack / Rollup / Parcel

WebpackRollupParcel 统称为静态模块打包器

这一类构建工具,通常需要指定入口 - entry,然后以 entry 为起点,通过分析整个项目内各个源文件之间的依赖关系,构建一个模块依赖图 - module graph,然后再将 module graph 分离为三种类型的 bundle: entry 所在的 initial bundlelazy load 需要的 async bundle 和自定义分离规则的 custome bundle

这几个构建工具各有优势:

  • Webpack 大而全,配置灵活,生态丰富,是构建工具的首选。
  • Parcel 号称零配置,使用简单,适合不太需要定制化构建的项目使用。
  • Rollup 推崇 ESM 标准开发,打包出来的代码干净,适用于组件库开发。

Vite / Esbuild

新一代构建工具。

esbuild, 基于 go 语言实现,代码直接编译成机器码(不用像 js 那样先解析为字节码,再编译为机器码),构建速度比 webpack 更快。

vite, 开发模式下借助浏览器对 ESM 的支持,采用 nobundle 的方式进行构建,能提供极致的开发体验;生产模式下则基于 rollup 进行构建。

js 模块化的发展史和构建工具的变化

javascript 语言设计之初,只是作为一个简单的脚本语言用来丰富网站的功能,并不像 javac++ 那样有 module 的概念,发展到现在的模样,也经历了相当长的时间。

这段时间,可以简单归纳为:

  • 青铜时代 - no module;
  • 白银时代 - cjs、amd、cmd、umd、esm 相继出现;
  • 黄金时代 - 组件模块化;

不同的时代,构建工具也不同。

青铜时代

由于没有 module 的概念, javascript 无法在语言层面实现模块之间的相互隔离相互依赖,只能由开发人员手动处理。

相应的,早期的 web 开发也比较简单甚至简陋:

  • 通过对象iife(或者闭包)的方式实现模块隔离
  • 通过手动确定 script加载顺序确定模块之间的依赖关系
  • jsp 开发模式,没有专门的前端,htmljscss 代码通常也由后端开发人员编写。

为了节省带宽保密,通常需要对前端代码做压缩混淆处理。这个时候,构建工具为 YUI Tool + Ant

白银时代

chrome v8 引擎 和 node 的横空出世,给前端带来了无限的可能。

同时,javascript 的模块化标准也有了新的发展:

  1. commonjs 规范,适用于 node 环境开发。
  2. amdcmd 规范,适用于浏览器环境。
  3. umd,兼容 amdcommonjs,代码可以同时运行在浏览器node 环境。
  4. ESM,即 ES6 module(这个时候还不是很成熟);

同时还出现了 lesssasses6jslinteslinttypescript 等新的东西, 前端角色也开始承担越来越重要的作用,慢慢的独立出来。

有了 node 提供的平台,大量的工具开始涌现:

  • requirejs 提供的 r.js 插件,可以分析 amd 模块依赖关系合并压缩 js优化 css
  • less / sass 插件,可以将 less / sass 代码转化为 css 代码;
  • babel,可以将 es6 转化为 es5
  • typescript,将 ts 编译为 js
  • jslint / eslint,代码检查;

这个时候,我们可以将上面的的这些操作配置成一个个任务,然后通过 Grunt / Gulp 自动执行任务。

黄金时代

基于 AngularVueReact 三大框架和 Webpack 的使用,组件模块化成为前端开发的主流模式。同时 ESM 规范也原来越成熟,被更多的浏览器支持。

ReactWebpack 为例,通常我们会将一个应用涉及到的所有的功能拆分为一个个组件,如路由组件、页面组件、表单组件、表格组件等,一个组件对应一个源文件,然后通过 Webpack 将这些源文件打包。在开发过程中,还会通过 Webpack 开启一个 local server,实时查看代码的运行效果。

Webpack 是一个静态模块打包器,它会以 entry 指定的入口文件为起点,分析整个项目内各个源文件之间的依赖关系,构建一个模块依赖图 - module graph,然后将 module graph 分离为多个 bundle。在构建 module graph 的过程中,会使用 loader 处理源文件,将它们转化为浏览器可以是识别的 jscssimage音视频等。

随着时间的发展, Webpack 的功能越来越来强大,也迎来诸多对手。

Webpack1||
Rollup 出现(推崇 ESM 规范,可以实现 tree shaking, 打包出来的代码更干净)||
Webpack2(也实现了 tree shaking, 但是配置还是太繁琐了)||
Parcel (号称 0 配置)||
Webpack4(通过 mode 确定 development 和 production 模式,各个模式有自己的默认配置)||
Webpack5(持久化缓存、module federation)Esbuild(采用 go 语言开发,比 Webpack 更快)Vite(推崇 ESM 规范,开发模式采用 nobundle,更好的开发体验)

丰富的构建工具,形成了百花绽放的局面,可用于不同的情形,给开发人员带来了越来越多的选择。

结束语

目前来看,构建工具在整个前端体系中占据的位置是越来越重要。只会 Webpack 甚至不懂构建工具已经无法满足日常开发。这就需要我们时时学习,紧跟时代的脚步,了解最新的技术,不断前进。

尽管前路坎坷,依然相信未来可期,加油 💪🏻 !


http://chatgpt.dhexx.cn/article/5BmYT8xf.shtml

相关文章

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

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

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

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

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

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

Linux下使用Git入门

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

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

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

Git入门学习教程

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

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

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

Git入门看这一篇就够了

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

Git入门级教程

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

Git入门起步

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

git新手入门教程

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

Git入门到精通全套教程

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

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分有工作区,暂存区,本地库 Git具体命令 1. 初始化 命令: git init首先新建一个文件夹,把他当作我们要用git来管理的一个项目文件。右键点击GitBashHere 会弹出一个命令框,我们执行git init 这代表我…

git入门(必看)

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

git快速入门

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

Git从入门到精通

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

Git快速入门(图文教程)

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

史上最简单的Git入门教程

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

Git入门

目录 一、准备工作 1.安装Git 二、git简介 1.Git是什么? Git是一个开源的【分布式】【版本控制系统】,用于敏捷高效地处理任何或小或大的项目 2.Git与SVN区别(重点1/2/3/7点) 3.实践操作:Gitee网站相关操作 3.1 …