/ build.ts
build.ts
1 import * as fsp from 'fs/promises'; 2 import { build, analyzeMetafile, BuildOptions, context } from "esbuild"; 3 4 import { program } from 'commander'; 5 6 program 7 .option("--map") 8 .option("--watch") 9 .option("--meta") 10 .option("--minify") 11 .option("--analyze") 12 .action(async (options: { map?: boolean; watch?: boolean; meta?: boolean; minify?: boolean; analyze?: boolean })=>{ 13 const buildopts:BuildOptions = { 14 tsconfig: "./tsconfig.json", 15 entryPoints: { 16 index: "./src/index.ts", 17 }, 18 platform: "node", 19 bundle: true, 20 format: "cjs", 21 outdir: "dist", 22 logLevel: "info", 23 sourcemap: options.map, 24 sourcesContent: false, 25 metafile: options.meta || options.analyze, 26 minify: options.minify, 27 plugins: [], 28 }; 29 30 if (options.watch) { 31 await (await context(buildopts)).watch(); 32 } else { 33 const result = await build(buildopts).catch(()=>process.exit(1)); 34 if (options.meta) { 35 await fsp.writeFile('./out/meta.json', JSON.stringify(result.metafile)); 36 } 37 if (options.analyze) { 38 console.log(await analyzeMetafile(result.metafile!, { color: true, verbose: true })); 39 } 40 } 41 }).parseAsync();