99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
import inquirer from "inquirer";
|
|
import { exec, execSync } from "child_process";
|
|
import path from "node:path";
|
|
import fs from "node:fs";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
// 替换原有的 __dirname 定义
|
|
const dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
// 获取 apps 目录
|
|
const appsDir = path.join(dirname, "../apps");
|
|
|
|
const EXCLUDE_DIRS = ["platform"];
|
|
// 通过 apps 目录生成 commands 对象
|
|
try {
|
|
const commands = fs
|
|
.readdirSync(appsDir)
|
|
.filter((app) => {
|
|
const isDirectory = fs.statSync(path.join(appsDir, app)).isDirectory();
|
|
return isDirectory && !EXCLUDE_DIRS.includes(app);
|
|
})
|
|
.map((app) => ({
|
|
name: `📦 ${app}`, // 显示带图标的友好名称
|
|
value: app, // 实际值保持原目录名
|
|
}));
|
|
|
|
// console.log(commands);
|
|
|
|
// 提供交互式选择
|
|
inquirer
|
|
.prompt([
|
|
{
|
|
type: "list",
|
|
name: "command",
|
|
message: "选择要独立运行的子应用",
|
|
choices: commands,
|
|
},
|
|
])
|
|
.then(async (answers) => {
|
|
const command = `turbo run dev --filter=@sy/low-code-${answers.command}`;
|
|
|
|
// 使用 spawn 替代 execSync
|
|
const { spawn } = await import("child_process");
|
|
const child = spawn(command.split(" ")[0], command.split(" ").slice(1), {
|
|
stdio: "inherit",
|
|
cwd: path.join(appsDir, ".."),
|
|
shell: true,
|
|
env: {
|
|
...process.env,
|
|
PATH: `${process.env.PATH}:${path.join(appsDir, "../node_modules/.bin")}`,
|
|
},
|
|
});
|
|
|
|
// 添加子进程事件监听
|
|
child.on("error", (err) => {
|
|
process.exit(1);
|
|
});
|
|
|
|
child.on("exit", (code) => {
|
|
if (code === 0) {
|
|
} else {
|
|
}
|
|
process.exit(code || 0);
|
|
});
|
|
|
|
// 修改 SIGINT 处理逻辑
|
|
process.on("SIGINT", () => {
|
|
console.log("\n🛑 正在终止子应用进程...");
|
|
child.kill("SIGINT");
|
|
process.exit(0);
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
if (error.isTtyError) {
|
|
console.log("\n👋 终端环境异常");
|
|
} else if (error.message.includes("User force closed the prompt")) {
|
|
console.log("\n🚪 已主动退出程序");
|
|
} else {
|
|
console.error("执行错误:", error.message);
|
|
}
|
|
process.exit(0);
|
|
});
|
|
} finally {
|
|
}
|
|
|
|
// 添加全局异常处理
|
|
process.on("uncaughtException", (error) => {
|
|
if (error.message.includes("User force closed the prompt")) {
|
|
console.log("\n🔌 连接已断开");
|
|
process.exit(0);
|
|
}
|
|
});
|
|
|
|
// 添加 SIGINT 监听
|
|
process.on("SIGINT", () => {
|
|
console.log("\n🛑 收到终止信号");
|
|
process.exit(0);
|
|
});
|