feat: 搭建前后端可执行程序示例
This commit is contained in:
55
scripts/dev.ts
Normal file
55
scripts/dev.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
interface ChildProcessInfo {
|
||||
name: string;
|
||||
process: Bun.Subprocess;
|
||||
}
|
||||
|
||||
const env = {
|
||||
...process.env,
|
||||
BACKEND_PORT: process.env.BACKEND_PORT ?? process.env.PORT ?? "3000",
|
||||
};
|
||||
|
||||
const children: ChildProcessInfo[] = [
|
||||
{
|
||||
name: "server",
|
||||
process: Bun.spawn(["bun", "run", "dev:server"], {
|
||||
env,
|
||||
stdout: "inherit",
|
||||
stderr: "inherit",
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "web",
|
||||
process: Bun.spawn(["bun", "run", "dev:web"], {
|
||||
env,
|
||||
stdout: "inherit",
|
||||
stderr: "inherit",
|
||||
}),
|
||||
},
|
||||
];
|
||||
|
||||
const stopChildren = () => {
|
||||
for (const child of children) {
|
||||
child.process.kill();
|
||||
}
|
||||
};
|
||||
|
||||
process.on("SIGINT", () => {
|
||||
stopChildren();
|
||||
process.exit(130);
|
||||
});
|
||||
|
||||
process.on("SIGTERM", () => {
|
||||
stopChildren();
|
||||
process.exit(143);
|
||||
});
|
||||
|
||||
const firstExit = await Promise.race(
|
||||
children.map(async (child) => ({ name: child.name, code: await child.process.exited })),
|
||||
);
|
||||
|
||||
stopChildren();
|
||||
|
||||
if (firstExit.code !== 0) {
|
||||
console.error(`${firstExit.name} exited with code ${firstExit.code}`);
|
||||
process.exit(firstExit.code ?? 1);
|
||||
}
|
||||
Reference in New Issue
Block a user