35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
|
|
// Pre-compile every public/*.jsx to public/dist/*.js using esbuild.
|
||
|
|
// Issue #139 — production was shipping React dev builds + in-browser @babel/standalone.
|
||
|
|
// Now JSX is transformed at Docker build time and the runtime loads minified UMD React.
|
||
|
|
const { build } = require('esbuild');
|
||
|
|
const path = require('path');
|
||
|
|
const fs = require('fs');
|
||
|
|
|
||
|
|
const root = path.resolve(__dirname, '..');
|
||
|
|
const publicDir = path.join(root, 'public');
|
||
|
|
const outDir = path.join(publicDir, 'dist');
|
||
|
|
fs.mkdirSync(outDir, { recursive: true });
|
||
|
|
|
||
|
|
const entries = fs.readdirSync(publicDir).filter(f => f.endsWith('.jsx'));
|
||
|
|
|
||
|
|
(async () => {
|
||
|
|
for (const f of entries) {
|
||
|
|
const src = path.join(publicDir, f);
|
||
|
|
const out = path.join(outDir, f.replace(/\.jsx$/, '.js'));
|
||
|
|
await build({
|
||
|
|
entryPoints: [src],
|
||
|
|
outfile: out,
|
||
|
|
bundle: false,
|
||
|
|
loader: { '.jsx': 'jsx' },
|
||
|
|
jsx: 'transform',
|
||
|
|
jsxFactory: 'React.createElement',
|
||
|
|
jsxFragment: 'React.Fragment',
|
||
|
|
minify: true,
|
||
|
|
sourcemap: true,
|
||
|
|
target: ['es2019'],
|
||
|
|
logLevel: 'info',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
console.log(`[build-jsx] compiled ${entries.length} jsx files to ${outDir}`);
|
||
|
|
})().catch(err => { console.error(err); process.exit(1); });
|