refactor(dx/server): simplify build script even further

This commit is contained in:
Elian Doran 2025-09-01 20:29:34 +03:00
parent 1e991c0526
commit 72a256eccf
No known key found for this signature in database
2 changed files with 55 additions and 64 deletions

View File

@ -1,76 +1,21 @@
import * as esbuild from "esbuild";
import { join } from "path";
import * as child_process from "child_process";
import BuildHelper from "../../../scripts/build-utils";
const projectDir = __dirname + "/..";
const outDir = join(projectDir, "dist");
const build = new BuildHelper("apps/server");
async function runBuild() {
esbuild.build({
entryPoints: [
join(projectDir, "src/main.ts"),
join(projectDir, "src/docker_healthcheck.ts")
],
tsconfig: join(projectDir, "tsconfig.app.json"),
platform: "node",
bundle: true,
outdir: outDir,
outExtension: {
".js": ".cjs"
},
format: "cjs",
external: [
"electron",
"@electron/remote",
"better-sqlite3",
"./xhr-sync-worker.js",
"vite"
],
splitting: false,
loader: {
".css": "text",
".ejs": "text"
},
define: {
"process.env.NODE_ENV": JSON.stringify("production"),
},
minify: true
});
}
async function main() {
build.buildBackend([ "src/main.ts", "src/docker_healthcheck.ts" ])
function copyAssets() {
// Copy server assets
// Copy assets
build.copy("src/assets", "assets/");
build.copy("../../packages/share-theme/src/templates", "share-theme/templates/");
// Copy node modules
for (const module of [ "better-sqlite3", "bindings", "file-uri-to-path" ]) {
build.copy(`node_modules/${module}`, `node_modules/${module}/`);
}
// Copy sync worker.
// Copy node modules dependencies
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path" ]);
build.copy("node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js");
// Copy share templates.
build.copy("../../packages/share-theme/src/templates", "share-theme/templates/");
}
function buildAndCopyClient() {
// Trigger the build.
child_process.execSync("pnpm build", { cwd: join(projectDir, "../client"), stdio: "inherit" });
// Copy the artifacts.
build.copy("../client/dist", "public/");
// Remove unnecessary files.
// Integrate the client.
build.triggerBuildAndCopyTo("apps/client", "public/");
build.deleteFromOutput("public/webpack-stats.json");
}
async function main() {
await runBuild();
copyAssets();
buildAndCopyClient();
}
main();

View File

@ -1,14 +1,18 @@
import { execSync } from "child_process";
import { build as esbuild } from "esbuild";
import { rmSync } from "fs";
import { copySync, emptyDirSync, mkdirpSync } from "fs-extra";
import { join } from "path";
export default class BuildHelper {
private rootDir: string;
private projectDir: string;
private outDir: string;
constructor(projectPath: string) {
this.projectDir = join(__dirname, "..", projectPath);
this.rootDir = join(__dirname, "..");
this.projectDir = join(this.rootDir, projectPath);
this.outDir = join(this.projectDir, "dist");
emptyDirSync(this.outDir);
@ -25,4 +29,46 @@ export default class BuildHelper {
rmSync(join(this.outDir, path), { recursive: true });
}
async buildBackend(entryPoints: string[]) {
await esbuild({
entryPoints: entryPoints.map(e => join(this.projectDir, e)),
tsconfig: join(this.projectDir, "tsconfig.app.json"),
platform: "node",
bundle: true,
outdir: this.outDir,
outExtension: {
".js": ".cjs"
},
format: "cjs",
external: [
"electron",
"@electron/remote",
"better-sqlite3",
"./xhr-sync-worker.js",
"vite"
],
splitting: false,
loader: {
".css": "text",
".ejs": "text"
},
define: {
"process.env.NODE_ENV": JSON.stringify("production"),
},
minify: true
});
}
triggerBuildAndCopyTo(projectToBuild: string, destPath: string) {
const projectDir = join(this.rootDir, projectToBuild);
execSync("pnpm build", { cwd: projectDir, stdio: "inherit" });
copySync(join(projectDir, "dist"), join(this.projectDir, "dist", destPath));
}
copyNodeModules(nodeModules: string[]) {
for (const module of nodeModules) {
this.copy(`node_modules/${module}`, `node_modules/${module}/`);
}
}
}