42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
|
|
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);
|
||
|
|
}
|