mirror of
https://github.com/zadam/trilium.git
synced 2025-10-11 16:06:24 +08:00
99 lines
3 KiB
TypeScript
99 lines
3 KiB
TypeScript
import { execSync } from "child_process";
|
|
import { build as esbuild } from "esbuild";
|
|
import { cpSync, existsSync, rmSync } from "fs";
|
|
import { copySync, emptyDirSync, mkdirpSync } from "fs-extra";
|
|
import { join } from "path";
|
|
|
|
export default class BuildHelper {
|
|
|
|
private rootDir: string;
|
|
projectDir: string;
|
|
outDir: string;
|
|
|
|
constructor(projectPath: string) {
|
|
this.rootDir = join(__dirname, "..");
|
|
this.projectDir = join(this.rootDir, projectPath);
|
|
this.outDir = join(this.projectDir, "dist");
|
|
|
|
emptyDirSync(this.outDir);
|
|
}
|
|
|
|
copy(projectDirPath: string, outDirPath: string) {
|
|
let sourcePath: string;
|
|
if (projectDirPath.startsWith("/")) {
|
|
sourcePath = join(this.rootDir, projectDirPath.substring(1));
|
|
} else {
|
|
sourcePath = join(this.projectDir, projectDirPath);
|
|
}
|
|
|
|
if (outDirPath.endsWith("/")) {
|
|
mkdirpSync(join(outDirPath));
|
|
}
|
|
copySync(sourcePath, join(this.outDir, outDirPath), { dereference: true });
|
|
}
|
|
|
|
deleteFromOutput(path: string) {
|
|
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 moduleName of nodeModules) {
|
|
const sourceDir = tryPath([
|
|
join(this.projectDir, "node_modules", moduleName),
|
|
join(this.rootDir, "node_modules", moduleName)
|
|
]);
|
|
|
|
const destDir = join(this.outDir, "node_modules", moduleName);
|
|
mkdirpSync(destDir);
|
|
cpSync(sourceDir, destDir, { recursive: true, dereference: true });
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function tryPath(paths: string[]) {
|
|
for (const path of paths) {
|
|
if (existsSync(path)) {
|
|
return path;
|
|
}
|
|
}
|
|
|
|
console.error("Unable to find any of the paths:", paths);
|
|
process.exit(1);
|
|
}
|