# ESBuild 插件

`@kokojs/plugin-esbuild` 提供了基于 [esbuild](https://github.com/evanw/esbuild) 进行压缩的能力。

## 安装

```bash
yarn add @kokojs/plugin-esbuild --dev
```

安装完成后，在 `koko.config.js` 中添加如下配置：

```js
module.exports = {
  plugins: {
    esbuild: {},
  },
};
```

## 介绍

ESBuild 是使用 Go 语言编写的 JavaScript bundler & minifier，它的特点是构建速度极快，相比 Terser 有数十倍的提升。

在大型工程中使用本插件，可以大幅度减少编译所需的时间。

### minify

- Type: `Boolean`
- Default: `true`

是否在 build 时使用 ESBuild 进行代码压缩，开启此选项时，会替换 Webpack 默认的 Terser 压缩。

### scriptTranspile

- Type: `'dev' | 'build' | 'all' | 'none'`
- Default: `'none'`

是否通过 esbuild-loader 来编译 JS/TS 代码。

- 值为 `dev` 时，表示仅在 dev 模式下开启（推荐使用）
- 值为 `build` 时，表示仅在 build 模式下开启
- 值为 `all` 时，会在 dev & build 模式下开启
- 值为 `none` 时，表示不开启

```js
// koko.config.js
module.exports = {
  plugins: {
    // 在 dev 时使用 esbuild
    esbuild: {
      scriptTranspile: 'dev',
    },
    // 在 build 时使用 babel
    babel: {
      scriptTranspile: 'build',
    },
  },
};
```

## 注意事项

ESBuild 压缩结果中会产生 ES6 语法，比如模板字符串，在使用时请考虑业务对兼容性的要求，不建议在 C 端业务中使用。

另外，在使用 ESBuild 插件时，一般需要关闭 ES Guard 插件。

```js
module.exports = {
  plugins: {
    'es-guard': {
      enable: false,
    },
  },
};
```

## 维护者

陈嘉涵。
