/** * Windows 可靠的后台启动器: * node scripts/start-detached.mjs * 以 detached+unref 方式拉起同目录 cli-live.js / cli-nodes.js,不随终端会话消亡。 */ import { spawn } from "node:child_process"; import { resolve, dirname } from "node:path"; import { fileURLToPath } from "node:url"; import { openSync } from "node:fs"; const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), ".."); const args = process.argv.slice(2); if (!args.length) { console.error("用法: node scripts/start-detached.mjs server | node-native | node-adapter [额外参数...]"); process.exit(1); } const MAP = { "server": ["src/cli-live.js", "server"], "node-native": ["src/cli-nodes.js", "native"], "node-adapter": ["src/cli-live.js", "node-adapter"], }; const target = MAP[args[0]] ? [...MAP[args[0]], ...args.slice(1)] : ["src/cli-nodes.js", ...args]; const log = openSync(resolve(ROOT, "_run", "detached.log"), "a"); const child = spawn(process.execPath, target, { cwd: ROOT, detached: true, stdio: ["ignore", log, log], env: { ...process.env, HOST: process.env.HOST || "0.0.0.0" }, // 默认双栈,远端可连 }); child.unref(); console.log("已脱离启动 pid=" + child.pid + ": " + target.join(" "));