Skip to content

Commit 1622f0c

Browse files
committed
dev server now uses a lock file to prevent the build from deleting the server files and cleans up when closing the dev server
1 parent 7e61c29 commit 1622f0c

2 files changed

Lines changed: 48 additions & 1 deletion

File tree

build/cleanup.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,29 @@ import * as chalkUtils from "./chalkUtils.js";
22
import removeDir from "./removeDir.js";
33
import { cleanup as config } from "../buildconfig.js";
44
import fromConsole from "./fromConsole.js";
5+
import fs from "fs";
6+
import path from "path";
7+
import { fileURLToPath } from "url";
8+
9+
const __filename = fileURLToPath(import.meta.url);
10+
const __dirname = path.dirname(__filename);
11+
const DEV_LOCK_FILE = path.resolve(__dirname, "../.dev-server-running");
512

613
export default function cleanup() {
714
let hadError = false;
815
let hadTip = false;
916

1017
chalkUtils.step("Cleaning up");
1118

12-
if (!config.keepExport) removeDir("../dist/export");
19+
const isDevServerRunning = fs.existsSync(DEV_LOCK_FILE);
20+
21+
if (!config.keepExport) {
22+
if (isDevServerRunning) {
23+
chalkUtils.info("Skipping export cleanup - dev server is running");
24+
} else {
25+
removeDir("../dist/export");
26+
}
27+
}
1328
if (!config.keepExportStep) removeDir("../dist/exportStep");
1429
if (!config.keepGenerated) removeDir("../generated");
1530

build/dev.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,47 @@ import express from "express";
22
import { exec } from "child_process";
33
import chokidar from "chokidar";
44
import cors from "cors";
5+
import fs from "fs";
6+
import path from "path";
7+
import { fileURLToPath } from "url";
58
import fromConsole from "./fromConsole.js";
69
import * as chalkUtils from "./chalkUtils.js";
710
import { basePort } from "../devConfig.js";
11+
import cleanup from "./cleanup.js";
12+
13+
const __filename = fileURLToPath(import.meta.url);
14+
const __dirname = path.dirname(__filename);
15+
const DEV_LOCK_FILE = path.resolve(__dirname, "../.dev-server-running");
816

917
let port = basePort;
1018
const localHostURL = () => `http://localhost:${port}/addon.json`;
1119
let buildRunning = false;
1220

1321
export default async function dev() {
22+
// Create lock file to indicate dev server is running
23+
fs.writeFileSync(DEV_LOCK_FILE, String(process.pid));
24+
chalkUtils.info("Dev server lock file created");
25+
26+
// Clean up lock file on exit
27+
const cleanupLockFile = () => {
28+
if (fs.existsSync(DEV_LOCK_FILE)) {
29+
fs.unlinkSync(DEV_LOCK_FILE);
30+
chalkUtils.info("Dev server lock file removed");
31+
}
32+
cleanup();
33+
};
34+
35+
process.on("SIGINT", () => {
36+
cleanupLockFile();
37+
process.exit(0);
38+
});
39+
40+
process.on("SIGTERM", () => {
41+
cleanupLockFile();
42+
process.exit(0);
43+
});
44+
45+
process.on("exit", cleanupLockFile);
1446
// Execute build command
1547
const runBuild = () => {
1648
if (buildRunning) return;

0 commit comments

Comments
 (0)