How to properly watch Node and TypeScript apps 👀
I’m really liking Node, especially as a prototyping tool. It’s just incredibly fast to hack something together that kind of works. My preferred language to work with it is TypeScript, because types.
When prototyping it’s very common to do a lot of rebuilding and observing changes - be it for tests, or for a debug build when running an API. Because of that, a lot of tools ship with some kind of watch
command that watches your directory for changes, and rebuilds whatever has changed, whenever it’s changed.
Not in my TypeScript/Node setup, though! Well, to be exact - there is a flag to watch
on the tsc
TypeScript compiler command, and there’s a tool called nodemon
that watches and runs Node apps for you, but they don’t necessarily work nicely together!
What we need is:
tsc
to watch oursrc/
dir for changes, outputing tobuild/
nodemon
to watch ourbuild/
dir for changes and runningindex.js
In your package.json
you can therefore make two entries - watch-build
and watch-run
, that will run their respective commands:
"scripts": {
//...
"watch-build": "tsc --watch",
"watch-run": "nodemon --watch build build/index.js",
}
Now, this will work fine if we just run each of these commands in different terminal tabs, or windows. Of course, that would require me to have two tabs open, and that’s absolutely unacceptable!
That’s where a bit of shell wizardy comes in handy, especially the process fork operator: &
. You can use that to split a process in 2, so they will run in parallel. I created another script
entry, linking my two watch-*
scripts:
"scripts": {
//...
"👀": "yarn watch-build & yarn watch-run"
}
Voilá - running yarn 👀
now does what I wanted all along!