low-code/scripts/low-code-start.mjs

86 lines
2.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { execSync } from "child_process";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { getLoadAnimation } from "./utils/index.mjs";
const loadAnimation = getLoadAnimation("正在启动应用...");
// 基础路径配置
const dirname = path.dirname(fileURLToPath(import.meta.url));
const rootDir = path.join(dirname, "../");
try {
loadAnimation.start();
// 检查 turbo 是否可用
try {
execSync("turbo --version", { stdio: "ignore" });
} catch {
loadAnimation.stop();
console.error("❌ 未找到 turbo请先执行以下命令安装");
console.log("npm install -g turbo");
process.exit(1);
}
const { spawn } = await import("child_process");
const child = spawn("turbo", ["run", "dev"], {
stdio: "inherit",
cwd: rootDir,
shell: true, // 启用 shell 解析
env: {
...process.env,
PATH: `${process.env.PATH}:${path.join(rootDir, "node_modules/.bin")}`,
},
});
// 增加错误事件监听
child.on("error", (err) => {
loadAnimation.fail(`启动失败: ${err.message}`);
process.exit(1);
});
console.log("🚀 执行命令: turbo run dev");
// 监听子进程退出
child.on("exit", (code) => {
if (code === 0) {
loadAnimation.succeed("应用启动成功");
} else {
loadAnimation.fail(`应用异常退出,代码 ${code}`);
}
process.exit(code || 0); // 确保父进程退出
});
// 监听终止信号
process.on("SIGINT", () => {
loadAnimation.stop();
console.log("\n🛑 收到终止信号,正在清理进程...");
child.kill("SIGINT"); // 先终止子进程
process.exit(0);
});
} catch (error) {
loadAnimation.stop();
if (error.message.includes("User force closed the prompt")) {
console.log("\n🚪 已主动退出程序");
} else {
console.error("执行错误:", error.message);
}
process.exit(0);
} finally {
loadAnimation.stop();
}
// 保留全局异常处理
process.on("uncaughtException", (error) => {
loadAnimation.stop();
console.error("未捕获异常:", error.message);
process.exit(1);
});
// 保留终止信号处理
process.on("SIGINT", () => {
loadAnimation.stop();
console.log("\n🛑 收到终止信号");
process.exit(0);
});