文章目录

  • 背景
  • 分类
    • 转译器
    • 打包器
  • 对比
    • gulp VS webpack
    • Bundle vs Bundleless(代表就是webpack VS vite)
    • 其他比较
  • 个人理解总结
  • 官网

背景

做前端也有好多年了,从最早的 jQuery 时代到现在的三大框架,这过程中用到了很多构建工具,今天就来盘点一下我们前端开发常用的这些构建工具。

盘点之前呢,我们先聊聊现代前端开发的痛点,也是这些构建工具出现的原因:

  • 开发过程注重速度、配置复杂度
  • 线上部署注重体积

分类

我们根据功能将这些工具分为两种:
转译器:将一门高级语音转译为另一种高级语言,如 ts 转译为 js、es6 转译为 es5 等等。
打包器:将项目中的各种文件如png、sass、json 等等打包成想要的结果。

转译器:babel、esbuild、swc、tsc
打包器:gulp、webpack、vite、rollup、esbuild、snowpack、parcel

转译器

转译器再分类:
用js/ts实现的:babel、tsc
其他语言实现的:esbuild(go)、swc(rust)

这里的区别主要是性能,其他语言实现的性能会高一些,比如 esbuild 官网就号称速度比其他工具高这么多

打包器

也可以分为两类:
一类是通过监听源代码变化然后重新构建项目将打包后的代码推送到浏览器的传统模式。如 Webpack、rollup、parcel
另一类是通过浏览器的原生 module 来实现动态打包的 bundleless 模式。如:vite、snowpack

对比

gulp VS webpack

其实平常开发就能明显感觉到,现在这个时代,webpack 比 gulp 使用的频率更高了,但其实并不是 webpack 比 gulp 厉害,而是他们偏向的应用场景不一样,gulp 更偏向将开发流程中让人痛苦或耗时的任务自动化,从而减少你所浪费的时间。而webpack 更侧重于模块化打包,也就是官网的那张图,将所有依赖的 js、less、png 等等打包为最终需要的模块。

所以在 jQuery 的时代,更多的是用 gulp,做代码压缩之类的事情。
在现在的 SPA 单页面应用的时代,更多使用 webpack,对不同的模块进行打包,并且通过 plugin 也能实现压缩等功能。

虽然在一些功能上确实有重复,比如:文件合并、压缩、less/sass编译等等,但是对于 gulp 来说模块化不是他强调的东西,他旨在规范前端开发流程。而 webpack 更是明显强调模块化开发,而那些文件压缩合并、预处理等功能,不过是他附带的功能。

gulp 强调的是前端开发的工作流程,通过配置一系列的task,定义执行顺序,来让gulp执行,从而构建项目的整个前端开发流程。
webpack是一个前端模块化方案,更侧重模块打包,我们可以把开发中的所有资源(图片、js文件、css文件等)都看成模块,通过loader(加载器)和plugins(插件)对资源进行处理,打包成符合生产环境部署的前端资源。

gulp 时代没有模块化是依赖 RequireJS、SeaJS 的

Bundle vs Bundleless(代表就是webpack VS vite)

传统的 webpack 等工具会把代码打包成 Bundle 文件,而 vite 则是依赖原生的 ESM 来实现的,虽然在生产环境仍然要打包。

为什么 vite 生产环境要打包?
尽管原生 ESM 现在得到了广泛支持,但由于嵌套导入会导致额外的网络往返,在生产环境中发布未打包的 ESM 仍然效率低下(即使使用 HTTP/2)。为了在生产环境中获得最佳的加载性能,最好还是将代码进行 tree-shaking、懒加载和 chunk 分割(以获得更好的缓存)。

在过去我们一般都会使用Webpack这个打包构建工具来打包构建我们的代码,那为什么过去需要打包,简单来说就是一下几点:

  • HTTP/1.1 各浏览器有并行连接限制
  • 浏览器不支持模块系统(如 CommonJS 包不能直接在浏览器运行)
  • 代码依赖关系与顺序管理

为什么开始尝试不打包

  • 随着项目不断变大,启动和热更新所等待的时间越来越长
  • HTTP/2.0 多路并用
  • 各大浏览器逐一支持 ESM
  • 原生的解决了代码依赖和复用的问题
  • 越来越多的 npm 包拥抱 ESM(尽管很多包的依赖并不是)


其他比较

Rollup 通常用来打包第三方库,vite 在生产环境打包也使用的 rollup,在预购建依赖的时候使用 esbuild。

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

Snowpack 是最早的 bundleless 打包器之一,它最大的特点就是闪电般的速度,但是生态不行。

个人理解总结

可以看到,未来有两个趋势:

  • 一个基于 ESM 实现的 bundleless 模式。
  • 一个是基于其他语言实现的打包器。

都使得前端开发速度更快,JavaScript 和我一样诞生于1996,在这短短几年的时间,发展的如此迅速,各类开发工具日新月异、欣欣向荣,希望未来这个行业能越来越好!!

官网

gulp:https://www.gulpjs.com.cn/
webpack:https://webpack.docschina.org/
vite:https://vitejs.cn/
rollup:https://www.rollupjs.com/
esbuild:https://esbuild.github.io/
snowpack:https://www.snowpack.dev/
babel:https://www.babeljs.cn/
parcel:https://parceljs.org/
swc:https://swc.rs/
tsc:https://www.typescriptlang.org/ 只要下载了 typescript 就可以使用该命令 npm i typescript -g tsc index.ts

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

  1. 前端构建工具的用法—grunt、gulp、browserify、webpack

    随着前端项目的飞速发展,项目越来越大.文件越来越多,前端工程化的工具也越来越多.下面介绍目前最流行的四种构建工具--grunt.gulp.browserify.webpack 所有的构建工具都是基于N ...

  2. npm run buil构建后页面白屏_从Npm Script到Webpack,6种常见的前端构建工具对比

    从Npm Script到Webpack,6种常见的前端构建工具对比 小编说:历史上先后出现了一系列构建工具,它们各有优缺点.由于前端工程师很熟悉JavaScript,Node.js又可以胜任所有构建需 ...

  3. 从Npm Script到Webpack,6种常见的前端构建工具对比

    从Npm Script到Webpack,6种常见的前端构建工具对比 小编说:历史上先后出现了一系列构建工具,它们各有优缺点.由于前端工程师很熟悉JavaScript,Node.js又可以胜任所有构建需 ...

  4. 前端构建工具-gulp !(解决浏览器缓存问题)

    一,为啥要用构建工具 项目中的js和css属于静态文件,客户端第一次访问的时候会缓存这些文件,那就意味着当我们需要改js跟css的时候,即使我们将文件中的代码改了重新发布,那么客户端也是看不到,客户端 ...

  5. Vue的新型前端构建工具Vite怎么用

    本文小编为大家详细介绍"Vue的新型前端构建工具Vite怎么用",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue的新型前端构建工具Vite怎么用"文章能帮助 ...

  6. 时下最流行前端构建工具Webpack 入门总结

    作者:wenjuanrao,腾讯 PCG 前端开发工程师 最近梳理了下以前 webpack 的相关开发经验,整理和总结了一份入门笔记,欢迎大家围观和批评指正. 随着 web 应用越来越复杂和庞大,前端 ...

  7. Gulp.js—比Grunt更易用的前端构建工具-前端自动化

    Gulp.js-比Grunt更易用的前端构建工具 Grunt是目前最流行的前端构建工具,对前端的效率帮助非常大,但Grunt并非完美无缺,json描述任务的方式,显得过于繁琐和不够简单,对于新手来说, ...

  8. 55 前端构建工具Gulp

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.第三方模块Gulp Gulp:基于node平台开发的前端构建工具. 前端构建工具:将机 ...

  9. 前端构建工具 Gulp.js 上手实例

    在软件开发中使用自动化构建工具的好处是显而易见的.通过工具自动化运行大量单调乏味.重复性的任务,比如图像压缩.文件合并.代码压缩.单元测试等等,可以为开发者节约大量的时间,使我们能够专注于真正重要的. ...

最新文章

  1. Android基础 : Android Service[转]
  2. RMSE、MAE等误差指标整理
  3. Netty专题-(1)初识Netty
  4. python 连接oracle学习
  5. php命令执行脚本文件,PHP文件包含与命令执行方式总结
  6. Hadoop开发环境搭建之Eclipse配置
  7. nrf52840 内部 flash 结构
  8. [复变函数]第20堂课 5.4 整函数与亚纯函数的概念
  9. 在商业化这件事上,百度Apollo智能车联究竟做得怎么样了?
  10. NOJ [F] 懒惰的风纪委Elaine 求一堆数能组成多少个数小于等于n
  11. 用VS软件开发“中国象棋“游戏
  12. 定时任务:创建静态定时任务、动态定时任务
  13. 对线性回归、逻辑回归、各种回归的概念学习
  14. TS 编译工具!从 ts-loader 到 Babel
  15. 2021-2027全球与中国协同办公软件市场现状及未来发展趋势
  16. 判断url链接是否有效的几种方法
  17. 北京联通sip话机安装指导
  18. 计算机网络实验报告tcp,TCP 计算机网络实验报告
  19. 可编程计算机控制器课设,可编程控制器课程设计.doc
  20. centos 配置ntp时间同步服务

热门文章

  1. 要收藏的对勾和叉、星星
  2. 从IE到ME,微软依然在浏览器市场坚持,看看都有些什么新功能?
  3. C#笔记之移位运算符
  4. 勇者斗恶龙x服务器没有响应,勇者斗恶龙10新手常见问题
  5. 免费无限文档云同步方案浅析[2021最新方案][粉丝专属]
  6. 伪共享,并发编程无声的性能杀手
  7. 程序员笑话 ps 有点老
  8. Linux终端连接redis数据库【重点】
  9. 中国医科大学21秋学期《药理学(本科)》实践考试试题
  10. 湖北职业技术学院计算机专业宿舍,湖北职业技术学院宿舍条件