82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
|
|
import { build, transform } from 'esbuild';
|
||
|
|
import fs from 'fs/promises';
|
||
|
|
import glob from 'fast-glob';
|
||
|
|
|
||
|
|
// Get build mode from command line argument
|
||
|
|
const mode = process.argv[2] || 'dev';
|
||
|
|
const isProd = mode === 'prod';
|
||
|
|
|
||
|
|
console.log(`Building in ${mode} mode...`);
|
||
|
|
|
||
|
|
const MESH_OUTFILE = 'src2/pack/mesh.js';
|
||
|
|
const MESH_EXTRAS = [
|
||
|
|
'mod/*/mesh.js',
|
||
|
|
'mod/*/tra1.js'
|
||
|
|
];
|
||
|
|
|
||
|
|
async function appendExtraModules(extras, minify = false) {
|
||
|
|
const files = await glob(extras);
|
||
|
|
if (files.length === 0) return;
|
||
|
|
|
||
|
|
const transformed = await Promise.all(
|
||
|
|
files.map(async (file) => {
|
||
|
|
const code = await fs.readFile(file, 'utf8');
|
||
|
|
if (!minify) return code;
|
||
|
|
|
||
|
|
const result = await transform(code, {
|
||
|
|
minify: true,
|
||
|
|
loader: 'js',
|
||
|
|
target: 'es2020',
|
||
|
|
});
|
||
|
|
return result.code;
|
||
|
|
})
|
||
|
|
);
|
||
|
|
|
||
|
|
await fs.appendFile(MESH_OUTFILE, transformed.join(''));
|
||
|
|
console.log(`Appended ${files.length} module(s) to ${MESH_OUTFILE}`);
|
||
|
|
}
|
||
|
|
|
||
|
|
async function buildApp() {
|
||
|
|
try {
|
||
|
|
// Bundle main app
|
||
|
|
await build({
|
||
|
|
entryPoints: [ 'src2/main/mesh.js' ],
|
||
|
|
bundle: true,
|
||
|
|
outfile: MESH_OUTFILE,
|
||
|
|
format: 'esm',
|
||
|
|
external: ['module'],
|
||
|
|
sourcemap: !isProd, // true for dev, false for prod
|
||
|
|
minify: isProd, // false for dev, true for prod
|
||
|
|
target: 'es2020',
|
||
|
|
platform: 'browser',
|
||
|
|
define: {
|
||
|
|
'process.env.NODE_ENV': `"${mode}"`
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
appendExtraModules(MESH_EXTRAS, isProd);
|
||
|
|
|
||
|
|
// Bundle worker
|
||
|
|
await build({
|
||
|
|
entryPoints: [ 'src2/mesh/work.js' ],
|
||
|
|
bundle: true,
|
||
|
|
outfile: 'src2/pack/work.js',
|
||
|
|
format: 'esm',
|
||
|
|
external: ['module'],
|
||
|
|
sourcemap: !isProd, // true for dev, false for prod
|
||
|
|
minify: isProd, // false for dev, true for prod
|
||
|
|
target: 'es2020',
|
||
|
|
platform: 'browser',
|
||
|
|
define: {
|
||
|
|
'process.env.NODE_ENV': `"${mode}"`
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log(`Build completed successfully in ${mode} mode!`);
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Build failed:', error);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
buildApp();
|