UNPKG

env-reloader

Version:

Auto-restart Node.js server on .env changes | dotenv reload watcher for development

66 lines (54 loc) 1.63 kB
#!/usr/bin/env node 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();