esbuild 是一个快速的 JavaScript 打包器,主要目标是带来构建工具性能的新时代,并在此过程中创建易于使用的现代捆绑器。
esbuild 是一个用 Go 编写的快速而简单的 JavaScript 捆绑包,其主要特点有:
- 极速,无需缓存
- ES6 和 CommonJS 模块
- ES6 模块的 Tree Shaking
- JavaScript 和 Go 的 API
- TypeScript 和 JSX 语法
- sourcemap
- minify
- plugins
以上是 esbuild 官方对该项目的一些介绍。
本文将介绍 esbuild 的一些基本的用法,如何捆绑 JavaScript 应用程序,包括 TypeScript、图像文件、CSS 等。
安装 esbuild
首先,使用 npm 安装 esbuild:
$ npm i -g esbuild
然后,您可以通过调用 esbuild 命令来验证是否安装成功:
$ esbuild --version # 0.14.38
如果您不想在全局范围内安装 esbuild,也可以这样做:
$ npm i esbuild
但您必须使用完整路径调用 esbuild:
$ ./node_modules/.bin/esbuild --version # 0.14.38
使用 esbuild 捆绑 TypeScript
创建一个 main.ts
文件,其中有如下内容:
let message: string = 'Hello esbuild!' console.log(message)
通过 CLI 捆绑 TypeScript 代码:
$ esbuild main.ts --outfile=output.js --bundle --loader:.ts=ts output.js 87b Done in 4ms
esbuild 命令接受 main.ts
作为入口,它是应用程序启动的地方。
然后,提供 outfile
选项作为定义输出文件的方法。如果不提供此选项,esbuild 会将结果发送到 stdout
。
loader
选项是用于加载 TypeScript 文件扩展名的选项。但是,您可以忽略此选项,因为 esbuild 可以根据文件扩展名决定使用哪个 loader
。
通过 bundle
选项,esbuild 将把所有依赖项内联到 output.js
文件中。
运行命令后,将捆绑到 output.js
文件,内容如下:
(() => { // main.ts var message = "Hello esbuild!"; console.log(message); })();
我们来看一下不使用 bundle
选项的情况。
我们更改 main.ts
文件的内容如下:
import { sayHello } from './lib' SayHello()
在创建 lib.ts
文件,其中编写一个 sayHello
并导出:
export function sayHello() { console.log('Hello esbuild!') }
如果不使用 bundle
选项,esbuild 只会在结果中导入依赖项:
$ esbuild main.ts import { sayHello } from "./lib"; sayHello();
但如果使用 bundle
选项,esbuild 将在结果中内联 lib.ts
的内容:
$ esbuild main.ts --bundle (() => { // lib.ts function sayHello() { console.log("Hello esbuild!"); } // main.ts sayHello() })();
使用 bundle
选项,可以将所有代码打包到一个文件中。换句话说,两个文件变成一个文件。
esbuild 命令例子:
esbuild lambda.ts --bundle --minify --sourcemap --platform=node --target=es2020 --outfile=dist/index.js
注:关于 sourcemap可以参考 http://123.57.164.21/?p=9863