'ts-node-dev not restarting when changes made

Here are my files :

package.json :

"scripts": {
  "generate-interfaces": "ts-node src/cli/generate-interfaces.ts",
  "dist": "npm run generate-interfaces && rm -rf dist && tsc && cp -r static/ dist/ && cp -r resource/ dist/",
  "prestart": "npm run generate-interfaces",
  "start": "ts-node-dev --respawn --transpileOnly --no-notify ./src/index.ts",
  "start:inspect": "ts-node-dev --no-deps --inspect -- ./src/index.ts",
  "pretest": "npm run generate-interfaces",
  "test": "jest"
 }

tsconfig.json

{
"compilerOptions": {
"declaration": true,
"target": "es2017",
"module": "commonjs",
"esModuleInterop": true,
"outDir": "dist",
"sourceMap": true,
"skipLibCheck": true,
"typeRoots": ["node_modules/@types", "./typings", "node_modules/**/*.d.ts"],
"lib": ["esnext"]
},
"include": ["src/**/*.ts", "./typings/**/*.d.ts"],
"exclude": ["node_modules/**", "dist"]
}

When I do any changes, I get the little popup, but it doesn't actually restart the server not sure what I am doing wrong here.

Note: The first time I do changes after server restart manually it shows me a popup and something like this in the terminal [INFO] 22:07:09 Restarting: src/analytics-engine.ts has been modified after that no changes detection.



Solution 1:[1]

The issue is resolved now. I found out the problem using --debug that it was an error related to 'SIGTERM'. So I added a flag --exit-child in my npm start script.

Solution 2:[2]

--exit-child worked for me too.

Example in package.json

"scripts": {
        "start": "ts-node-dev --respawn --transpile-only --exit-child --watch src src/index.ts"
    },

Solution 3:[3]

I have something similar, using ts-node-dev and pino.

When the server starts, there are some logging to output server init process. When the dev server restarts by ts-node-dev, sometimes it spits out write: EPIPE error, from what I'm assuming is the restarted server trying to write to the old stream.

the --exit-child flag seems to have fixed the issue

Solution 4:[4]

you can try to put --respawn and --inspect flags in your package.json

Example:

{
  "scripts": {
    "start:dev": "tsnd --respawn --inspect --transpile-only --ignore-watch node_modules src/server"
  }
}

Solution 5:[5]

you can treat it in your index file:

this line: process.on("SIGTERM", tearDown);

import {$log} from "@tsed/common";
import { PlatformExpress } from "@tsed/platform-express";
import {Server} from "./Server";

async function bootstrap() {
  try {
    const platform = await PlatformExpress.bootstrap(Server);
    await platform.listen();
  } catch (error) {
    $log.error({event: "SERVER_BOOTSTRAP_ERROR", error});
  }
}

const chalk = require("chalk");

process.stdin.resume();  

const tearDown = async () => {
  process.exit();
};

// // catch ctrl+c event and exit normally
process.on("SIGINT", tearDown);     

//catch uncaught exceptions, trace, then exit normally
process.on("uncaughtException", function (e) {
  console.log("Uncaught Exception...");
  console.log(e.stack);
  process.exit(99);
});

// catches "kill pid" (for example: nodemon restart)
process.on("SIGUSR1", tearDown);
process.on("SIGUSR2", tearDown);
process.on("SIGTERM", tearDown);

bootstrap();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Himanshu Teotia
Solution 2 Michael Brenndoerfer
Solution 3 ppwater
Solution 4 Matheus Santos Araújo
Solution 5 Ricardo