跳到主要内容

ESbuild

  • Vite,snowpack使用了esbuild

Vite和snowpack底层都是用了esbuild。从Vite 的README上可以发现esbuild的执行速度非常快,typescript转义成javascript要比官方的tsc快20-30倍

ESbuild为什么这么快?​

  1. js是单线程串行,esbuild是新开一个进程,然后多线程并行,充分发挥多核优势
  2. go是纯机器码,肯定要比JIT快
  3. 不使用 AST,优化了构建流程

ESbuild用来干嘛? 【功能、作用】​

  • 利用 esbuild 编译代码

    • esbuild 提供了 writeFileSync/writeFile 对 code 进行编译
  • 利用 esbuild 压缩代码体积

    • esbuild 提供了一个 minify 配置允许用户去压缩代码体积
  • 利用 esbuild 处理 jsx 代码

  • 处理其他资源 【esbuild内置了一些文件处理的loader】

ESbuild 的缺点​

  • ESbuild不使用AST(抽象语法树)因此带来的一些缺点

babel的插件是通过AST来完成的,而esbuild没有使用ast,所以项目使用babel插件的话,是没有很好的迁移方案

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