env-reloader
Version:
Auto-restart Node.js server on .env changes | dotenv reload watcher for development
66 lines (54 loc) • 1.63 kB
JavaScript
const chokidar = require("chokidar");
const { spawn } = require("child_process");
const path = require("path");
const args = process.argv.slice(2);
if (!args.length) {
console.log("Usage: env-reloader <your-start-command>");
console.log("Example: env-reloader server.js");
process.exit(1);
}
let serverProcess;
let isRestarting = false;
function startServer() {
if (serverProcess) {
console.log("Stopping server...");
isRestarting = true;
serverProcess.kill("SIGTERM");
// Agar process 1 second me close nahi hua to force kill
const forceKillTimer = setTimeout(() => {
if (serverProcess) {
console.log("Force killing server...");
serverProcess.kill("SIGKILL");
}
}, 1000);
serverProcess.on("exit", () => {
clearTimeout(forceKillTimer);
setTimeout(() => {
actuallyStartServer();
}, 300); // small delay for port release
});
} else {
actuallyStartServer();
}
}
function actuallyStartServer() {
console.log("Starting server...");
isRestarting = false;
serverProcess = spawn("node", args, {
stdio: "inherit",
shell: true,
});
serverProcess.on("close", (code) => {
if (!isRestarting) {
console.log(`Server process exited with code ${code}`);
}
});
}
const envPath = path.resolve(process.cwd(), ".env");
console.log(`Watching for changes in: ${envPath}`);
chokidar.watch(envPath).on("change", () => {
console.log("\n.env file changed. Restarting server...\n");
startServer();
});
startServer();