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
- JavaScript のコードを文字列として渡します
- ドキュメント
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