最近,有一个开源项目引起了 Github 上很多人的关注。据悉,开源项目的作者 Evan Wallace 是一个前端爱好者,拥有几个高 Star 数的前端开源项目。作者学了 Go 语言后,觉得可以让前端的构建工具和 Go 语言的编译一样快,于是他写了这个工具:esbuild ,他认为当前用于 Web 的构建工具至少比它们应该慢一个数量级。他希望这个项目可以证明我们的J avaScript 工具可以更快。

开源项目地址:https://github.com/evanw/esbuild。

如何使用?

安装

假定您已安装 Go 语言工具链,则可以使用 make 生成可执行文件。当前可在 npm 上的单独软件包中找到预构建的二进制文件:

npm install -g esbuild-linux-64   # for Linuxnpm install -g esbuild-darwin-64  # for macOSnpm install -g esbuild-windows-64 # for Windowsnpm install -g esbuild-wasm       # for all other platforms

这将添加一个名为 esbuild 的命令。

使用

命令行界面获取入口点列表,并为每个入口点生成一个捆绑文件。以下是可用的选项:

Usage:  esbuild [options] [entry points]

Options:  --name=...            The name of the module  --bundle              Bundle all dependencies into the output files  --outfile=...         The output file (for one entry point)  --outdir=...          The output directory (for multiple entry points)  --sourcemap           Emit a source map  --error-limit=...     Maximum error count or 0 to disable (default 10)  --target=...          Language target (default esnext)

  --minify              Sets all --minify-* flags  --minify-whitespace   Remove whitespace  --minify-identifiers  Shorten identifiers  --minify-syntax       Use equivalent but shorter syntax

  --define:K=V          Substitute K with V while parsing  --jsx-factory=...     What to use instead of React.createElement  --jsx-fragment=...    What to use instead of React.Fragment

  --trace=...           Write a CPU trace to this file  --cpuprofile=...      Write a CPU profile to this file

Example:# Produces dist/entry_point.js and dist/entry_point.js.map  esbuild --bundle entry_point.js --outdir=dist --minify --sourcemap

性能

我的主要基准测试通过将 three.js 库复制10次并从头开始构建单个捆绑包而没有任何缓存来近似一个大型代码库。对于此基准测试,esbuild 比我测试的其他 JavaScript 捆绑程序(Webpack,Rollup,Parcel和FuseBox)快10-100倍。基准测试可以使用 make bench-three

Bundler Time Relative slowdown Absolute speed Output size
esbuild 0.54s 1x 1013.8 kloc/s 5.83mb
rollup + terser 40.48s 75x 13.5 kloc/s 5.80mb
webpack 46.46s 86x 11.8 kloc/s 5.97mb
parcel 124.65s 231x 4.4 kloc/s 5.90mb
fuse-box@next 172.56s 320x 3.2 kloc/s 6.55mb

为什么快

  • 它是用Go语言编写的,该语言可以编译为本地代码
  • 解析,打印和源映射生成全部完全并行化
  • 无需昂贵的数据转换,只需很少的几步即可完成所有操作编
  • 写代码时要牢记速度,并尽量避免不必要的内存分配

项目目前状态

当前支持:

  • CommonJS modules
  • ES6 modules
  • 使用以下方式绑定 ES6 模块的静态绑定 --bundle
  • 使用 --minify 完全缩小(空格,标识符和修饰符)
  • 启用 --sourcemap 时,完全支持源地图
  • .jsx 文件的 JSX 到 JavaScript 转换
  • 编译时标识符替换通过 --define
  • 使用 package.json 中的 browser 字段进行路径替换
  • 自动检测 tsconfig.json 中的 baseUrl

这是作者 2019-2020 年寒假期间写的一项业余爱好项目。我相信它是相对完整和实用的。但是,它是全新的代码,可能有很多错误。还没有任何人在生产中使用过它。合并运算符。

此外,官方还给了如何和 React 配合使用。

目前,该项目在 Github 上已收获 3400+ Star,并有 51 个 fork。近期增长很快,总在 GitHub 趋势榜。

推荐阅读

  • 震惊!这本 JS 开源图书高达 118000+ 星星:你不知道的 JS


OpenSourceDaily - 送给爱开源的你

Git · GitHub · GitLab · Gitee

项目解析jsx文件_神奇了!这个 Go 语言项目让前端构建快了近 100 倍相关推荐

  1. 项目解析jsx文件_仅含一个源文件:这5个开源项目值得一看

    全文共1199字,预计学习时长3分钟 图源:unsplash 程序员常常会根据自己的喜好和项目类型用不同的方式写代码.如果一个软件项目规模很大且发展迅速,他们通常会把整个任务分解成好几个文件,从而实现 ...

  2. 项目解析jsx文件_React系列二十二 云音乐项目实战

    项目地址:https://github.com/coderwhy/hy-react-web-music 如果觉得不错,或者对你有帮助,点一个star~ coderwhy 1.1. 项目简介 使用Rea ...

  3. 项目解析jsx文件_Rax 转小程序链路原理解析(一)

    前言 随着 1.0 版本的发布,Rax 在小程序端的转换能力也得到了补齐.现在,你可以像过去开发 Web/Weex 端的应用一样使用 Rax 来进行小程序的开发.本系列文章将介绍 Rax 转小程序链路 ...

  4. 项目解析jsx文件_React 基础:JSX 扩展语法

    前言 作为一个前端开发有些不好意思,居然还没有接触过 React ,就借这段时间积累下 React 相关经验,为疫情过后能有更多的就业机会. 如果你已经是个经验丰富的 React Developer ...

  5. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  6. python解析java文件_读取java文件

    JAVA通信编程(二)--如何读取java的properties配置文件(插播) 如何读取java的properties配置文件本不属于java通讯编程这个系列的范畴,但是在做一些应用中编写通讯编程需 ...

  7. java调用项目中的文件_详解eclipse项目中.classpath文件的使用

    1 前言 在使用eclipse或者myeclipse进行java项目开发的时候,每个project(工程)下面都会有一个.classpath文件,那么这个文件究竟有什么作用? 2 作用 .classp ...

  8. java解析dxf文件_浅析JVM方法解析、创建和链接

    一:前言 上周末写了一篇文章<你知道Java类是如何被加载的吗?>,分析了HotSpot是如何加载Java类的,干脆趁热打铁,本周末再来分析下Hotspot又是如何解析.创建和链接类方法的 ...

  9. eclipse java读取文件_在eclipse完成对Java_web项目里面资源文件的读取

    Java_web项目的资源文件一般有两种: 一种是存放数据之间有联系的文件,使用xml文件 另一种是存放数据之间没有联系的文件,使用properties文件 这里我们对properties文件读写做示 ...

最新文章

  1. Linux LVM硬盘管理及LVM扩容
  2. python清洗数据去除停用词_Python从pandas数据帧中删除停用词
  3. 使用Recast.AI创建具有人工智能的聊天机器人
  4. 2019年4月第四周_2012年4月最佳怪胎文章
  5. 在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发
  6. delphi 到出execl2010 文件损坏_如何修复Linux中损坏的软件包?
  7. 开源信息系统开发平台之OpenExpressApp框架 1.1 春节飞虎版发布
  8. 利用WinSock进行有连接的通信
  9. 时光 php,ctphp-php教程-时光划过那刹那-PHP教程--创业的风,吹向了年轻之长藤个人博客网站...
  10. 【资料分享】500篇干货解读人工智能新时代
  11. c语言 实现音乐旋律播放
  12. ipad上能够编辑python_10 个可以在平板电脑上使用的 Python 编辑器
  13. 6. LaTeX 参考文献的排版与引用
  14. android dummy codec
  15. 职业发展百问之第一问:三十岁了再进入IT行业还有机会吗?
  16. 做虚拟化的服务器网卡用什么,VMware ESX两种虚拟网卡性能对比测试
  17. Kryo 缓冲区溢出
  18. Java如何设置word中某段文字的字体/段落样式
  19. Matlab多元非线性函数拟合
  20. 微积分-微积分的本质

热门文章

  1. (转)如何使用CodeSmith批量生成代码
  2. APIO 2014 回文串(Manacher+后缀自动机+倍增)
  3. 05-UIDynamic
  4. IT增值服务,客户案例(一)--山东青岛在职人士,2年.Net经验,转Java开发半年
  5. ListView系列(七)——Adapter内的onItemClick监听器四个arg参数 (转)
  6. 教你如何计算腰围~~
  7. Facebook Connect Magento Extension
  8. 用递归方法实现读取文件夹下所有文件信息
  9. IBM 启动网格项目 -- “全球社区网格”,招募志愿者
  10. 彻底解决Python3写爬虫或网站时的乱码问题