Files

42 lines
1.3 KiB
TypeScript
Raw Permalink Normal View History

import * as esbuild from 'esbuild';
// Shim unused Node.js built-ins that get pulled in by dependencies.
const nodeShimPlugin: esbuild.Plugin = {
name: 'node-builtins-shim',
setup(build) {
// Mark node built-ins as empty modules — they are imported but not actually used at runtime.
const builtins = ['path', 'fs', 'os', 'crypto', 'stream', 'util', 'events', 'http', 'https', 'net', 'tls', 'child_process', 'url', 'assert', 'buffer', 'tty', 'readline'];
const filter = new RegExp(`^(${builtins.join('|')})$`);
build.onResolve({ filter }, (args) => ({
path: args.path,
namespace: 'node-shim',
}));
build.onLoad({ filter: /.*/, namespace: 'node-shim' }, () => ({
contents: 'export default {};',
loader: 'js',
}));
},
};
const buildOptions: esbuild.BuildOptions = {
entryPoints: ['demo/demo.web.ts'],
bundle: true,
format: 'esm',
platform: 'browser',
outdir: 'demo',
sourcemap: true,
target: 'es2022',
logLevel: 'info',
plugins: [nodeShimPlugin],
};
const serve = process.argv.includes('--serve');
if (serve) {
const ctx = await esbuild.context(buildOptions);
const { host, port } = await ctx.serve({ servedir: 'demo' });
console.log(`\n 🌐 Web demo running at http://localhost:${port}/demo.web.html\n`);
} else {
await esbuild.build(buildOptions);
}