ESbuild 简介

这篇具有很好参考价值的文章主要介绍了ESbuild 简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Esbuild 是什么:

ESbuild 是一个类似webpack构建工具。它的构建速度是 webpack 的几十倍。

ESbuild 简介,前端,javascript,es6

为什么这么快 ?

js是单线程串行,esbuild是新开一个进程,然后多线程并行,充分发挥多核优势

go是纯机器码,肯定要比JIT快

不使用 AST,优化了构建流程。(也带来了一些缺点,后面会说)

ESbuild 使用介绍

ESbuild 文档: esbuild - API​

Esbuild 有命令行 ,js 调用, go 调用三种使用方式。这里主要讲利用 js 调用的方式。

利用 esbuild 编译代码

esbuild 提供了 writeFileSync/writeFile 对 code 进行编译, demo 如下

require('fs').writeFileSync('in.ts', 'let x: number =   1')
require('esbuild').buildSync({
  entryPoints: ['in.ts'],
  outfile: 'out.js',
})

利用 esbuild 处理 jsx 代码

require('esbuild').transformSync('<div/>', {
  jsxFactory: 'h', //默认为 React.CreateElement,可自定义, 如果你想使用 Vue 的 jsx 写法, 将该值换成为 Vue.CreateElement
  loader: 'jsx', // 将 loader 设置为 jsx 可以编译 jsx 代码
})
 
// 同上,默认为 React.Fragment , 可换成对应的 Vue.Fragment。
require('esbuild').transformSync('<>x</>', {
  jsxFragment: 'Fragment',
  loader: 'jsx',
})

利用 esbuild 压缩代码体积

esbuild 提供了一个 minify 配置允许用户去压缩代码体积,实际 demo 如下

var js = 'fn = obj => { return obj.x }'
require('esbuild').transformSync(js, {
  minify: true,
})
 
// minify 后
{
  code: 'fn=n=>n.x;\n',
  map: '',
  warnings: []
}

处理其他资源

与webpack不同的是,esbuild内置了一些文件处理的loader。 当esbuild解析到某后缀时,会自动使用该loader进行处理。 当然,你也可以手动指定对应的loader处理器,如你想使用jsx loader去处理js文件。可以按下面的实例进行配置。 目前Esbuild 内置了 js,jsx,ts,tsx,css,text,binary,dataurl,file类型的loader

require('esbuild').buildSync({
  entryPoints: ['app.js'],
  bundle: true,
  loader: { '.js': 'jsx' }, // 默认使用 js loader ,手动改为 jsx-loader 
  outfile: 'out.js',
})

在Webpack中使用esbuild

在当前前端环境中,直接使用 esbuild 代理 webpack 是不现实的。在目前的主流方案是在 webpack 中使用 esbuild 去做一些代码的 transform (代替 babel-loader)。

Webpack 构建流程

先讲讲 webpack 的构建流程:Webpack原理浅析

ESbuild 简介,前端,javascript,es6

Webpack 的构建流程简单来说就是递归编译每一个模块文件,对于不同类型的文件使用不同的 webpack loader 进行处理。我们要做的就是就是将 webpack 中做代码转化的步骤(babel-loader, ts-loader) esbuild-loader 代替。

esbuild-loader

esbuild-loader 就是一个这样的工具。简单讲下 esbuild-loader 如何使用。

首先你需要在 plugin 中引用 esbuild-plugin。 将 esbuild 的相关方法挂载在webpack中

ESbuild 简介,前端,javascript,es6

然后就可以正常的配置 webpack 相关配置了。下面讲讲可以拿来干啥

  • 用 esbuild 代替 babel-loader(ts-loader同理) 做代码降级

ESbuild 简介,前端,javascript,es6

  • 用 esbuild 代替 ts-loader 处理 ts 代码

ESbuild 简介,前端,javascript,es6

  • Esbuild-loader 还可以用于minify代码

ESbuild 简介,前端,javascript,es6
添加图片注释,不超过 140 字(可选)

esbuild 的缺点

esbuild 同样不是完美的(如果真有那么完美为什么还没有大面积使用呢?),为了保证 esbuild 的编译效率,esbuild 没有提供 AST 的操作能力。所以一些通过 AST 处理代码的 babel-plugin 没有很好的方法过渡到 esbuild 中(说的就是你 babel-plugin-import)。so,如果你的项目使用了 babel-plugin-import, 或者一些自定义的 babel-plugin 。在目前来看是没有很好的迁移方案的。

生产环境使用 esbuild 的可行性

先说结论,在生产环境下使用 esbuild 是可行的。像 snowpack , vite 等构建工具都已经是用了 esbuild 作为代码处理工具(稳定性已经足够)。如果你一定要使用,可以看看是否符合下面标准

  1. 没有使用一些自定义的 babel-plugin (如 babel-plugin-import)
  2. 不需要兼容一些低版本浏览器(esbuild 只能将代码转成 es6)

那你就可以大胆使用 esbuild-loader 为你的项目提效了~

提效成果

ESbuild 简介,前端,javascript,es6
可以看到升级完 esbuild 后提效明显。在冷启动阶段,打包速度能优化到 70% 在带 cache 的阶段,速度也能到 50%文章来源地址https://www.toymoban.com/news/detail-837156.html

到了这里,关于ESbuild 简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript 之 ES6 新特性

    在ES6中,模块化成为了JavaScript的标准特性。ES6模块化提供了一种更加优雅和可维护的方式来组织和管理JavaScript代码,可以有效地避免全局变量的污染和命名冲突的问题。以下是ES6模块化的一些主要特性: 导出(export): 可以通过 export 将一个变量、函数或类导出为一

    2024年02月07日
    浏览(46)
  • 【ES6】JavaScript中的Symbol

    Symbol是JavaScript中的一种特殊的、不可变的、不可枚举的数据类型。它通常用于表示一个唯一的标识符,可以作为对象的属性键,确保对象的属性键的唯一性和不可变性。 Symbol.for()是Symbol的一个方法,它用于创建一个已经注册的Symbol对象。当使用Symbol.for()创建Symbol对象时,会

    2024年02月10日
    浏览(42)
  • ES新特性系列(一)—— ES的简介与ES6

          前几天在BOSS上了解现在的前端工作的情况和各个公司要求的技术栈情况,看到一条非常有意思的要求:“能够理解并使用ES6、ES7、ES8、ES9、ES10新特性,都2024年了你总不能只知道ES6吧?”       各位彦祖现在现在就回忆一下,自己是否能把上述的ES系列的常用新特性都

    2024年04月29日
    浏览(31)
  • JavaScript版本ES5/ES6及后续版本

    Brendan Eich在短短10天内创建了JavaScript的第一个版本。它被称为摩卡,但已经具备了现代JavaScript的许多基本特性! 为了吸引Java开发人员,Mocha先是更改为LiveScript,然后又更改为JavaScript然而,JavaScript与Java几乎没有任何关系; 微软推出了IE,从网景复制JavaScript,并称之为JScript; 由

    2024年02月13日
    浏览(46)
  • JavaScript:ES6中类与继承

    在JavaScript编程中,ES6引入了一种更现代、更清晰的方式来定义对象和实现继承,那就是通过类和继承机制。本文将以通俗易懂的方式解释ES6中类与继承的概念,帮助你更好地理解和应用这些特性。 1. 类的创建与使用 类是一种模板,用于创建对象。在ES6中,我们可以使用 cl

    2024年02月13日
    浏览(42)
  • JavaScript之ES6高级语法(一)

    本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 今天学习的主要是关于ES6新语法知识的理解和应用 栈负责存放简单数据类型,堆负责存放复杂数据类型,但是复杂数据类型会把内容存在

    2024年02月09日
    浏览(51)
  • 【Javascript】ES6新增之类的认识

    在现代编程语言中,类是面向对象编程范式中的核心概念之一。 与函数类似,类本质上是一种特殊的函数,它允许我们将数据和操作封装在一起,以创建具有共同行为和状态的对象。 在类的世界里,我们有类表达式和类声明,它们各自具有自己的特性和用途。 ✨ 类本质上是

    2024年02月13日
    浏览(42)
  • 15 JavaScript ES6中的箭头函数

    15 JavaScript ES6中的箭头函数 什么是箭头函数 ES6中允许使用=来定义函数。箭头函数相当于匿名函数,并简化了函数定义。 基本语法 箭头函数在语法上比普通函数简洁多。箭头函数就是采用箭头=来定义函数,省去function。 函数的参数放在=前面的括号中,函数体跟在=后的

    2024年02月12日
    浏览(46)
  • 【ES6】 JavaScript 中的Object.assign

    Object.assign() 是 JavaScript 中的一个方法,它用于复制源对象的所有可枚举属性到目标对象。该方法会返回目标对象。 这是其基本用法: 在这个例子中,source 对象的所有可枚举属性都被复制到了 target 对象。 需要注意的是,Object.assign() 是浅复制(shallow copy),意味着如果源对

    2024年02月10日
    浏览(51)
  • JavaScript学习笔记01(包含ES6语法)

    Js 最初被创建的目的是“使网页更生动”。 Js 写出来的程序被称为 脚本 ,Js 是一门脚本语言。 被直接写在网页的 HTML 中,在页面加载的时候自动执行 脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JIN compiler) Js 不仅可以在浏览器中执行,也可以在

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包