improve esbuild. allow for (some) modules
This commit is contained in:
parent
2bb5a2399e
commit
9333524613
3 changed files with 84 additions and 72 deletions
|
|
@ -47,11 +47,11 @@
|
||||||
"connect": "^3.7.0",
|
"connect": "^3.7.0",
|
||||||
"earcut": "^2.2.3",
|
"earcut": "^2.2.3",
|
||||||
"express-useragent": "^1.0.13",
|
"express-useragent": "^1.0.13",
|
||||||
|
"fast-glob": "^3.3.3",
|
||||||
"jszip": "^3.7.1",
|
"jszip": "^3.7.1",
|
||||||
"manifold-3d": "^3.1.1",
|
"manifold-3d": "^3.1.1",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"prettier": "^3.5.3",
|
"prettier": "^3.5.3",
|
||||||
"react-responsive-carousel": "^3.2.23",
|
|
||||||
"serve-static": "^1.14.1",
|
"serve-static": "^1.14.1",
|
||||||
"three": "^0.174.0",
|
"three": "^0.174.0",
|
||||||
"three-mesh-bvh": "^0.7.6",
|
"three-mesh-bvh": "^0.7.6",
|
||||||
|
|
@ -103,7 +103,7 @@
|
||||||
"prebuild": "node bin/electron-pre.js",
|
"prebuild": "node bin/electron-pre.js",
|
||||||
"postbuild": "node bin/electron-post.js",
|
"postbuild": "node bin/electron-post.js",
|
||||||
"preinstall": "node bin/install-pre.js && npx webpack --config bin/webpack-three.js",
|
"preinstall": "node bin/install-pre.js && npx webpack --config bin/webpack-three.js",
|
||||||
"preinstall2": "npx webpack --config src2/webpack/webpack-three-esm.js && node src2/webpack/esbuild.config.js",
|
"preinstall2": "npx webpack --config src2/webpack/webpack-three-esm.js && node src2/webpack/esbuild.config.mjs",
|
||||||
"docs-dev": "docusaurus start",
|
"docs-dev": "docusaurus start",
|
||||||
"docs-build": "docusaurus build",
|
"docs-build": "docusaurus build",
|
||||||
"docs-serve": "docusaurus serve",
|
"docs-serve": "docusaurus serve",
|
||||||
|
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
// esbuild.config.js
|
|
||||||
import { build } from 'esbuild';
|
|
||||||
|
|
||||||
// Get build mode from command line argument
|
|
||||||
const mode = process.argv[2] || 'dev';
|
|
||||||
const isProd = mode === 'prod';
|
|
||||||
|
|
||||||
console.log(`Building in ${mode} mode...`);
|
|
||||||
|
|
||||||
// Dummy document shim for worker context
|
|
||||||
// const dummyDocument = `
|
|
||||||
// // Inject dummy document for worker context
|
|
||||||
// if (typeof document === 'undefined') {
|
|
||||||
// var document = {
|
|
||||||
// createElement: () => ({}),
|
|
||||||
// getElementById: () => null,
|
|
||||||
// querySelector: () => null,
|
|
||||||
// addEventListener: () => {},
|
|
||||||
// removeEventListener: () => {}
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
// if (typeof window === 'undefined') {
|
|
||||||
// var window = { };
|
|
||||||
// }
|
|
||||||
// `;
|
|
||||||
|
|
||||||
async function buildApp() {
|
|
||||||
try {
|
|
||||||
// Bundle main app
|
|
||||||
await build({
|
|
||||||
entryPoints: ['src2/main/mesh.js'],
|
|
||||||
bundle: true,
|
|
||||||
outfile: 'src2/pack/mesh.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}"`
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 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();
|
|
||||||
|
|
||||||
// You can add more build steps or static asset copying as needed.
|
|
||||||
82
src2/webpack/esbuild.config.mjs
Normal file
82
src2/webpack/esbuild.config.mjs
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
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();
|
||||||
Loading…
Reference in a new issue