/ 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();