nodemon.json
{
"execMap": {
"js": "babel-node"
},
"env": {
"NODE_ENV": "development"
},
"ext": ".js,.jsx",
"ignore": [
"test",
"dist",
"docs",
"logs"
],
"events": {
"restart": "sh ./nodemon.sh",
"crash": "sh ./nodemon.sh"
},
"script": "./src/server.js",
"restartable": "rs",
"verbose": false,
"watch": ["src"],
"stdin": false,
"stdout": true,
"quiet": true,
"colours": true
}
nodemon.sh
PID=$(ps aux | grep _babel-node | sed -n '2p' | awk '{print $2}');
if [ ! -z "$PID" ]; then
{ kill $PID && wait $PID; } 2>/dev/null;
fi;
src/server.js
import { exec } from 'child_process';
/* ...skipped for brevity... */
process.on('uncaughtException', (err) => {
if (err.message.includes("EADDRINUSE")) {
exec(`sh ./nodemon.sh`);
} else {
console.error("uncaughtException:", err.message);
}
});