esbuild
Go製/icons/javascript.icon//icons/typescript.icon//emoji/jsx.icon/etc. bundler
evanw/esbuild
wasm化されているので、web browserからも使用できる
e.g.
ScrapJupyter
scrapbox-bundler
ん?bsahd.icon
WebAssemblyへ切り出し
webpackよりかなり速い
早い理由
https://zenn.dev/crsc1206/articles/0b0960fa306d71#esbuild%E3%80%81なぜ速い%EF%BC%9F
更新頻度がすさまじい
各releaseごとの文章がとても詳しい
読み応えがある
新機能や破壊的変更はこれを読めばほぼ把握できる
ES Modulesにバンドルする際はbannerオプションを設定する必要がある
code:build.ts
import esbuild from 'esbuild';
await esbuild.build({
// logLevel: 'info', // ビルド時のログを出したいときは設定する
entryPoints: './src/main.ts', // トランスパイル対象のコード。今回はbundleするのでimportしているライブラリと自作モジュールも自動で含まれる
outdir: './dist', // トランスパイル結果のファイルの格納先
outExtension: { // 必須では無いが、ESM形式で出力されることを明示的にするため拡張子を.mjsにしている
'.js': '.mjs'
},
minify: true, // 必須では無いが、ファイルサイズ削減のため
bundle: true,
platform: 'node', // ブラウザ上などではなく、サーバーサイドのnodejsで実行するため
// tsconfig: './tsconfig.json', // デフォルトでtsconfig.jsonを使うが、ビルド時に設定を変える場合は指定する
format: 'esm', // ESMプロジェクトなので、出力フォーマットを'esm'に設定する必要
banner: { // commonjs用ライブラリをESMプロジェクトでbundleする際に生じることのある問題への対策
js: 'import { createRequire as topLevelCreateRequire } from "module"; import url from "url"; const require = topLevelCreateRequire(import.meta.url); const __filename = url.fileURLToPath(import.meta.url); const __dirname = url.fileURLToPath(new URL(".", import.meta.url));',
},
})
引用元:https://zenn.dev/link/comments/39ca988797f39f