AeThex-OS/script/build.ts
MrPiglr 8efae10378 fix(build): output server bundle as .cjs for ES module compatibility
- Change server output from index.js to index.cjs
- Update start script to run index.cjs
- Fixes 'module is not defined' error on Railway
- CommonJS format explicit with .cjs extension

Resolves module format conflict where package.json has 'type: module'
but server bundle uses CommonJS format
2026-02-12 15:10:41 -07:00

78 lines
1.6 KiB
TypeScript

import { build as esbuild } from "esbuild";
import { build as viteBuild } from "vite";
import { rm, readFile } from "fs/promises";
// server deps to bundle to reduce openat(2) syscalls
// which helps cold start times
const allowlist = [
"@google/generative-ai",
"@supabase/supabase-js",
"axios",
"bcrypt",
"connect-pg-simple",
"cors",
"date-fns",
"dotenv",
"drizzle-orm",
"drizzle-zod",
"express",
"express-rate-limit",
"express-session",
"jsonwebtoken",
"memorystore",
"multer",
"nanoid",
"nodemailer",
"openai",
"passport",
"passport-local",
"pg",
"socket.io",
"stripe",
"uuid",
"ws",
"xlsx",
"zod",
"zod-validation-error",
];
async function buildAll() {
await rm("dist", { recursive: true, force: true });
const enableSourcemap = process.argv.includes("--sourcemap");
console.log("building client...");
await viteBuild({
build: {
sourcemap: enableSourcemap,
},
});
console.log("building server...");
const pkg = JSON.parse(await readFile("package.json", "utf-8"));
const allDeps = [
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.devDependencies || {}),
];
const externals = allDeps.filter((dep) => !allowlist.includes(dep));
await esbuild({
entryPoints: ["server/index.ts"],
platform: "node",
bundle: true,
format: "cjs",
outfile: "dist/index.cjs",
define: {
"process.env.NODE_ENV": '"production"',
},
minify: true,
sourcemap: enableSourcemap,
external: externals,
logLevel: "info",
});
}
buildAll().catch((err) => {
console.error(err);
process.exit(1);
});