I have been working for the different kinds of Node JS application from the last 4 years. For every project I tried to improve the performance and code quality. From that, I found a very interesting way to restart the typescript application so fast.
When you are working with Node JS with Typescript you notice a significant delay while restarting the application by using ts-node.
ts-node
one of the best tool for NodeJS-Typescript development but when comes to typescript it doesn't do the best job.A typical nodejs-typescript
nodemon.json
look like these{
"watch" : ["src"],
"ext" : "ts",
"exec": "ts-node ./src/app/server.ts"
}
It will work fine but restart speed is too slow.
Don't trust the Server Start time here, it actually took more than 20 seconds to restart.
So I was playing with the nodemon options to make restart faster and found we map our executable with params, so I create this configuration for
nodemon.json
{
"env": {
"NODE_ENV": "development"
},
"execMap": {
"ts": "node --require ts-node/register"
},
"ext": "js,json,ts",
"ignore": [
".git",
"node_modules/**/node_modules"
],
"restartable": "rs",
"watch": [
"src/"
]
}
This increase the restarting speed, but that not enough for me. So again I started to digging through Google to find better ways.
Now I learned to diagnosis typescript and analysis my project by using this command:
./node_modules/.bin/tsc -project ./tsconfig.json --diagnostics
This gives an output like these:
Files: 372
Lines: 66423
Nodes: 253384
Identifiers: 89381
Symbols: 62938
Types: 3327
Instantiations: 7640
Memory used: 108724K
I/O read: 0.98s
I/O write: 0.02s
Parse time: 2.20s
Bind time: 0.40s
Check time: 0.29s
Emit time: 0.16s
Total time: 3.04s
I found
tsc
the command takes only 3 seconds to diagnosis the entire project and the parse time
is only taking the time. So started to find an alternatives for the ts-node.Instead of using
ts-node
I tried to restart the application using tsc
command.{
"dev": "concurrently \"tsc -w\" \"nodemon dist/app/server.js\""
}
This improves the restarting speed significantly
tsc
command works great for me, but I still digging google due to curiosity and found a package called ts-node-dev ts-node-dev
works very different than ts-node. It restarts the target node process only when the files changes and also provide the same file for typescript compilation process between restarts.This significantly increases the speed of restarting comparing to
nodemon -x ts-node
, etc...Step 1: Install the package
npm i ts-node-dev --save-dev
Step 2: Add Configuration
{
"dev": "node_modules/.bin/ts-node-dev --respawn --notify false --prefer-ts --ignore-watch node_modules -- src/app/server.ts "
}
This is the exact configuration I used in my project, this works very fine to me.
Step 3: Starts the application
npm run dev
This will restart the application every time you change a file with blazing speed.
After testing a lot of tool for developing typescript-nodejs I found the ts-node-dev work like a pro. I recommend to everyone to use the
ts-node-dev
instead of ts-node for your NodeJS-Typescript project. If you stick this far, thank you so much for reading this article and please consider to follow me on twitter