esbuild 极速的JavaScript构建打包工具

1、esbuild 是使用go语言编写的一个前端构建工具

相对于nodeJs的构建工具如webpack。go语言是纯机器码,没有js的解释过程;go新开了一个进程多线程并行,而js是单线程串行化的,所以从开发语言层面来说就更快。当nodejs还在解析打包程序的js的时候,go已经在解析要构建的js了。

2、esbuild内置了部分的loader直接使用go语言编写,可以直接使用

相对于nodeJs的构建工具中相同功能的loader相比也更快。不同于webpack中loader都要配置添加。比如内置了对.js、.jsx、.ts、.tsx 、.css、.module.css 等的支持,其他文件类型则需要添加社区的loader或者手写插件进行处理,比如:less、sass、img、字体图标库等。
esbuild的生态还不完善,很多插件其实只是包装了开源的loader框架,本质上还是用的js实现的,而且很多社区提供的插件都存在各种问题,需要自己实现插件,比如对css进行浏览器兼容添加浏览器前缀等问题

3、esbuild的代码分割很鸡肋

代码分割可以减小了初始加载时的文件体积,加速页面加载时间;也能提高缓存利用率,节省带宽成本;多个小块的代码可以并行下载,提高整体加载效率。而esbuild的代码分割,只支持esm 格式,对浏览器版本有限制;能对动态 import 的内容或多入口同时用到的代码进行分割。无法做到像webpack一样将使用到的某个库单独打包出去。

4、esbuild不支持HMR,需要借助插件实现。

5、esbuild目前的应用

主要因为esbuild在代码分割、css处理、不支持HMR、没有提供AST能力(不能转换成兼容低版本浏览器代码)等问题,虽然它很快,但它不适合直接用于生产环境,而更适合作为一种偏底层的模块打包工具,需要在它的基础上二次封装。在其他的构建工具中,只是将esbuild应用于开发环境,从而有更快的开发体验,比如在vite中 ,开发环境下使用esbuild快速构建,而构建部署版本时则使用的是rollup;在umi/mfsu中,开发环境下使用esbuild-loader替代label,而构建部署版本时则还是使用的babel。

总的来说,esbuild具有极快的构建速度、可扩展性、支持多种格式、不需要设置各种 loader,配置简单等。但还有很多不足:

  • 社区生态很弱,跟 Webpack 和 Vite 完全不在一个量级
  • 插件之间兼容性问题很严重
  • 代码分割能力太弱,只能基于入口进行分割
  • 对目标浏览器版本有一定要求
  • 不支持 HMR
  • 为了保持结构的一致性,没有提供转化的 AST 的 API
  • 由于工具和插件还是采用 JavaScript 编写,存在解析速度相对较慢的可能性
  • 对于复杂场景,配置还是像 Webpack 一样复杂
  • 可以在简单项目或类库开发中使用
    总之,esbuild 不是像 Webpack 是一个大一统项目,提供完善的插件机制,而是在极度精简之后的打包工具,快才是它的追求目标。

文章内容只做学习记录,内容转自别的大佬博客,主要参考:

Esbuild深度调研:吹了三年,能上生产了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/573269.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode in Python 69. Sqrt(x) (x的平方根)

求x的平方根,第一想法可能是遍历0~x,求其平方,找到或且但其时间复杂度为O(n),或是想到遍历0~M即可,其中M x // 2,将时间复杂度降至O()。本文利用二分思想,给出一种时间复…

博睿数据亮相GOPS全球运维大会,Bonree ONE 2024春季正式版发布!

2024年4月25日,博睿数据 Bonree ONE 2024 春季正式版焕新发布。同时,博睿数据AIOps首席专家兼产品总监贺安辉携核心产品新一代一体化智能可观测平台 Bonree ONE 亮相第二十二届 GOPS 全球运维大会深圳站。 Bonree ONE 2024 春季版产品重点升级数据采集、…

网上打印资料多少钱一张?网上打印价格是多少?

在数字化时代,网上打印服务正逐渐成为一种便捷、高效的打印解决方案。对于许多需要打印资料的用户来说,了解网上打印的价格和服务质量至关重要。那么,网上打印资料到底多少钱一张?网上打印价格又是如何呢?今天&#xf…

视频号下载小程序:轻松获取视频号视频

在数字化时代,短视频已成为人们日常生活中不可或缺的一部分。为了满足用户随时随地观看视频的需求,视频号小程序应运而生。本文将详细介绍视频号小程序的下载方法、功能特点以及使用技巧,帮助您更好地享受短视频带来的乐趣。 一、视频号小程…

C++ 之 string类 详细讲解

喜欢的人有点难追怎么办 那就直接拉黑 七个女生在一起是七仙女,那七个男生在一起是什么? 葫芦七兄弟 目录 一、为什么要学习string类 二、标准库中的string类 1.string类 2.string类的常用接口说明 2.1 string类对象的常见构造 2.2 string类对…

Vivado-OOC

OOC⇒Out-of-Context 在Vivado中,对于顶层设计,vivado使用自顶向下的全局(global)综合,将顶层文件下的所有模块都进行综合,但是在实际设计过程中,顶层设计会被多次修改和综合,但是有…

AI语音侵权第一案:配音演员获赔25万元,如何保护你的声音资产?

会议之眼 快讯 近日,北京互联网法院对全国首例AI声音侵权案作出一审宣判,引发了社会对AI技术与个人权益保护关系的广泛讨论。 原告殷某,一名配音师,发现自己的声音被AI化后在“魔音工坊”APP上出售,遂将运营主体等五…

Linux的学习之路:20、进程信号(2)

摘要 本章讲一下进程信号的阻塞信号和捕捉信号和可重入函数 目录 摘要 一、阻塞信号 1、阻塞信号 2、信号集操作函数 二、捕捉信号 1、内核如何实现信号的捕捉 2、代码实演 三、可重入函数 一、阻塞信号 1、阻塞信号 实际执行信号的处理动作称为信号递达(Delivery) …

MyBatis源码之前言—JDBC编码存在的问题和Mybatis的介绍

MyBatis源码之前言—JDBC编码存在的问题和Mybatis的介绍 为了方便操作,我们在sjdwz_test数据库下建立一张表: CREATE TABLE t_student (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键,name varchar(255) DEFAULT NULL COMMENT 名字,age int(255…

Web端Webrtc,SIP,RTSP/RTMP,硬件端,MCU/SFU融合视频会议系统方案分析

Web端视频融合,会议互通已经是视频会议应用的大趋势,一是目前企业有大量的老视频会议硬件设,二新业务又需要Web端支持视频会议监控直播需求,迫切需要一个融合对接的方案,即能把老的设备用起来,又能对接新的…

【每日刷题】Day22

【每日刷题】Day22 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1669. 合并两个链表 - 力扣(LeetCode) 2. 11. 盛最多水的容器 - 力扣&#…

分类算法——ROC曲线与AUC指标(九)

知道TPR与FPR TPRTP/(TP FN) 所有真实类别为1的样本中,预测类别为1的比例 FPR FP/(FP TN) 所有真实类别为0的样本中,预测类别为1的比例 ROC曲线 ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义…

Linux 内核设备树 ranges属性

今天有人问了我一下ranges属性&#xff0c;找了相关资料确认后&#xff0c;记录一下&#xff1a; 参考资料链接&#xff1a;让你完全理解linux内核设备树ranges属性地址转换 - vkang - 博客园 (cnblogs.com) ranges属性定义如下&#xff1a; ranges < local_address pa…

webpack面试题(持续汇总ing。。。)

webpack的编译过程 初始化 此阶段&#xff0c;webpack会将CLI参数、配置文件、默认配置进行融合&#xff0c;形成一个最终的配置对象。对配置的处理过程是依托一个第三方库 yargs 完成的。此阶段相对比较简单&#xff0c;主要是为接下来的编译阶段做必要的准备目前&#xff0c;…

三数之和 ---- 双指针

题目链接 题目: 分析: 解法一: 暴力解法, 将所有的三元组都算出来看是否为0, 题目要求去重操作, 所以我们可以使用set去重解法二: 因为我们知道当计算两数之和时, 我们使用的方法是将数组排序,然后利用"双指针"那么同理, 计算三个数之和: 1. 排序2. 固定一个数a, …

数据库管理-第176期 浅析代码团队建设(20240425)

数据库管理176期 2024-04-25 数据库管理-第176期 浅析代码团队建设&#xff08;20240425&#xff09;1 国内现状2 需求管控3 竞争与迭代总结 数据库管理-第176期 浅析代码团队建设&#xff08;20240425&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09…

安卓Activity的setContentView()流程分析

目录 前言一、Activity的视图加载过程1.1 视图结构1.2 流程分析1.2.1 Activity.java -->setContentView()1.2.2 Activity.java -->getWindow()1.2.3 PhoneWindow.java -->setContentView()1.2.4 PhoneWindow.java --->installDecor()1.2.4.1 PhoneWindow.java ---&…

Yolov5 export.py实现onnx模型的导出

查了很多资料&#xff0c;很多用python代码写的&#xff0c;只需要这个库那个库的&#xff0c;最后都没成功。 不如直接使用Yolov5里面的 export.py实现模型的转换。 一&#xff1a;安装依赖 因为yolov5里面的requirments.txt是将这些转换模型的都注释掉了 所以需要解除注释…

SpringCloud alibaba整合OpenFeign

目录 一、为什么使用OpenFeign 二、准备两个服务 三、最简单使用- 返回字符串 ①引入openfeign依赖 ②调用端在启动类上添加EnableFeignClients注解 ③在被调用端写一个简单的接口 ④在调用端新建一个service类 专门用于远程调用 ​编辑 ⑤ 在调用端写一个conteoller …

翻译《The Old New Thing》 - What does SHGFI_USEFILEATTRIBUTES mean?

What does SHGFI_USEFILEATTRIBUTES mean? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20040601-00/?p39073 Raymond Chen 2004年06月01日 在使用 SHGetFileInfo 函数时&#xff0c;你可以设置一个名为 SHGFI_USEFILEATTRIBUTES 的标志…
最新文章