devlog

Go言語で esbuild の Build API を呼び出し、JavaScriptのビルドをする

2023-07-24

こんにちは。
esbuild はGo言語で書かれてます。ドキュメントを眺めていたところ、Go言語から呼び出せることを知ったので、メモしておきます。

Build API と Transform API

esbuild のソースコードは evanw/esbuild にあります。 Go言語で書かれており、Build API と Transform API がexposeされてます。

Build API と Transform API の違いは入出力です。普通にesbuildでバンドルしたい時は Build API を用います。

Build API

  • エントリーポイントのファイルパスや出力先のディレクトリ情報を渡します
  • ドキュメント

Transform API

Build API でバンドルする

サンプルコードです。./src/index.ts を起点にJSファイルを読み取ります。バンドルして ./dist に吐き出します。

import ( esbuild "github.com/evanw/esbuild/pkg/api" ) func main() { // ビルドスクリプト esbuild.Build(esbuild.BuildOptions{ Bundle: true, EntryPoints: []string{"./src/index.ts"}, Outdir: "./dist", Write: true, Platform: esbuild.PlatformNode, Format: esbuild.FormatESModule, }) }

JavaScript で書き直す

(察しが付くかもですが) Build API はJSのパッケージ esbuild にもあり、設定が似通ってます。

上のコードをJavaScriptで書くと次のようになります。

import esbuild from 'esbuild' await esbuild.build({ bundle: true, entryPoints: [ './src/index.ts', ], outdir: './dist', // write: true, // JS ではデフォルトで true platform: 'node', format: 'esm', })

ほとんど同じですね。

細かい違いはあるようです。 例えば write と言うオプションは、Go言語でデフォルトがfalseなのに対し、JavaScriptではデフォルトでtrueでした。 これはドキュメントにも記載があります。

終わりに

上手く使えば便利だと思います。

例えば、Goのアプリケーションで、ほんのちょっとUIが欲しい時、、有用かもしれせん。 なお、package.json などJSのエコシステムとの役割分担を考える必要はあります。

  • 作成日
    2023-07-24
  • 更新日
    2023-07-24