diff --git a/src/build/vite/preview.ts b/src/build/vite/preview.ts index 0e9f95970a..9dd5c4ebc1 100644 --- a/src/build/vite/preview.ts +++ b/src/build/vite/preview.ts @@ -79,16 +79,26 @@ export function nitroPreviewPlugin(ctx: NitroPluginContext): VitePlugin { PORT: String(randomPort), }, }); + + const killChild = (signal: NodeJS.Signals) => { + if (child && !child.killed) { + child.kill(signal); + } + }; + for (const sig of ["SIGINT", "SIGHUP"] as const) { process.once(sig, () => { consola.info(`Stopping preview server...`); - if (child.killed === false) { - child.kill(sig); - process.exit(); - } + killChild(sig); + process.exit(); }); } - child.on("exit", (code) => { + + server.httpServer.once("close", () => { + killChild("SIGTERM"); + }); + + child.once("exit", (code) => { if (code && code !== 0) { consola.error(`[nitro] Preview server exited with code ${code}`); }