import { readFile } from "node:fs/promises"; import { spawn } from "node:child_process"; import { dirname, join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); const desktopRoot = join(repositoryRoot, "apps", "desktop"); const desktopManifest = JSON.parse( await readFile(join(desktopRoot, "package.json"), "utf8") ); const npmCli = process.env.npm_execpath || join(dirname(process.execPath), "node_modules", "npm", "bin", "npm-cli.js"); await new Promise((resolvePromise, reject) => { const child = spawn( process.execPath, [npmCli, "run", "make", "-w", "@md-to-pdf/desktop"], { cwd: repositoryRoot, env: process.env, stdio: "inherit", windowsHide: true } ); child.once("error", reject); child.once("exit", (code, signal) => { if (code === 0) { resolvePromise(); } else { reject( new Error( `桌面安装器构建失败:${signal ? `signal ${signal}` : `exit ${code ?? "unknown"}`}` ) ); } }); }); process.stdout.write( `已生成内置字体包的主安装器与便携 ZIP:${join(desktopRoot, "out", `v${desktopManifest.version}`)}\n` );