Today, I wanted to go over how to set up a TypeScript project for NodeJS from scratch.
It's something that I do fairly often and so it's nice to have this as a starter repo for some of my future NodeJS projects.
Let's first create a new directory for this project. I'll just call it ts-node-demo
for now, but you can just rename it at a later date when you use it to start a new project.
mkdir ts-node-demo
cd ts-node-demo
Let's make this a git repository and use yarn
for our package manager. It'll be a good idea not to commit any of our dependencies into our repo as well.
git init
yarn init
echo node_modules/ > .gitignore
Now I'll add the most basic dependencies for our TypeScript NodeJS project. Rather than doing an explicit build step and then running the plan JavaScript file that is a result of that build, I want to use the ts-node
library that will take care of that for me. I'll, of course, also add TypeScript
as well as the type definitions for NodeJS.
yarn add ts-node typescript @types/node
It'll be nice if I didn't have to restart the dev server everytime I save a file so let's add ts-node-dev
. If you've ever worked with nodemon
, this is pretty much the same, but for TypeScript.
yarn add -D ts-node-dev
package.json
{
"name": "ts-node-demo",
"version": "1.0.0",
"main": "index.js",
"author": "Warren Wong<me@warrenwong.org>",
"license": "MIT",
"dependencies": {
"@types/node": "^12.0.4",
"ts-node": "^8.2.0",
"typescript": "^3.5.1"
},
"devDependencies": {
"ts-node-dev": "^1.0.0-pre.39"
}
}
I'll update the package.json
to reflect the change to using TypeScript by changing index.js
to index.ts
. I should go ahead and create that file as well.
touch index.ts
Now let's add some scripts for starting the production app as well as starting the dev server. Since a service like Heroku would use yarn start
or npm start
to start the production server, I'll go ahead define "start"
as "yarn ts-node index.ts"
. To start the dev server, I want to just type yarn dev
, so I'll define "dev"
as "yarn ts-node-dev index.ts"
.
package.json
{
"name": "ts-node-demo",
"version": "1.0.0",
"main": "index.ts",
"author": "Warren Wong <me@warrenwong.org>",
"license": "MIT",
"dependencies": {
"ts-node": "^8.2.0",
"typescript": "^3.5.1"
},
"devDependencies": {
"@types/node": "^12.0.4",
"ts-node-dev": "^1.0.0-pre.39"
},
"scripts": {
"start": "yarn ts-node index.ts",
"dev": "yarn ts-node-dev index.ts"
}
}
Now to check if everything worked out, I'll need index.ts
to actually do something.
index.ts
console.log("Hello, World!");
Okay, time to test this out.
yarn dev
Using ts-node version 8.2.0, typescript version 3.5.1
Hello, World!
yarn start
Hello, World!
Top comments (2)
I wasn't aware of
ts-node-dev
. I had always usedts-node
withnodemon
. Thanks for sharing!If you are planning on publishing npm modules with Typescript, I have a helpful starter repo you may find useful. github.com/jdforsythe/typescript-n...