Start with a clean project
pnpm init
or
npm init -y
Install some dependencies
pnpm add -save-dev eslint @types/node @types/express typescript ts-node-dev
pnpm add --save express ejs
or
npm install -save-dev eslint @types/node @types/express typescript ts-node-dev
npm install --save express ejs
make a new folder for your project
mkdir src
touch src/app.ts
src/app.ts
import express from 'express';
const app = express();
const port = 3000;
app.use(express.json());
app.use(express.static("public"));
app.set("view engine", "ejs");
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
return console.log(`http://localhost:${port}`);
});
create a new folder for your public folder
create a new folder of views
Create tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist"
},
"lib": [
"es2015"
]
}
Now we will run eslintโs initialization command to interactively set up the project:
npx eslint --init
Now You have to answer some questions to finish the initialization process:
- How would you like to use ESLint?: To check syntax and find problems
- What type of modules does your project use?: JavaScript modules (import/export)
- Which framework does your project use?: None of these
- Does your project use TypeScript?: Yes
- Where does your code run?: Node
- What format do you want your config file to be in?: JavaScript
Finally, you will be prompted to install some additioanl eslint libraries. Choose Yes. The process will finish and youโll be left with the following configuration file:
Now we will use ts-node-dev for watching the changes in our typescript server file
As we already installed the dev dependency we do not have to do much we just have to add the start script in our package.json file
Lets Change our package.json and add some lines
add main
"main": "dist/app.js",
add lint and start in scripts
"lint": "eslint . --ext .ts",
"start": "ts-node-dev src/app.ts"
Finally It should look like this
{
"name": "typescript-node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"lint": "eslint . --ext .ts",
"start": "ts-node-dev src/app.ts"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/express": "^4.17.13",
"@types/node": "^18.0.0",
"@typescript-eslint/eslint-plugin": "^5.30.0",
"@typescript-eslint/parser": "^5.30.0",
"eslint": "^8.18.0",
"ts-node-dev": "^2.0.0",
"typescript": "^4.7.4"
},
"dependencies": {
"ejs": "^3.1.8",
"express": "^4.18.1"
}
}
Now start the project with pnpm or npm
pnpm start
or
npm start
Hurray you have a new project! ๐
Connect me on Twitter :- Twitter ๐ค๐ป
Do check out my Github for amazing projects:- Github ๐ค๐ป
Connect me on LinkedIn :- Linkedin ๐ค๐ป
Read my another article :-
Parallax In Next.js using React-Scroll-Parallax ๐
Top comments (10)
Here are a couple of nooby questions:
should
ts-node-dev
watch the app.ts or the start command should look like this:"start": "npx tsc && ts-node-dev dist/src/app.js
?Meaning, should we be watching the ts file or the compiled version?
If you deploy this app on production, how would you start the server?
no there is no need to add tsc in start script ts-node-dev do all the jobs but in production we should use our transpiled file as we have already type checked everything
ts-node-dev
doesn't transpile, does it? At least in my case, if I want to have the dist/build folder, I do need to manually runtsc
No, actually It does not transpile it automatically I will recommend you to create different scripts for development and production
"start:dev": "ts-node-dev src/app.ts",
"start": "tsc && node dist/app.js"
Thank you!
For a typescript project highly prefer
ts-node-dev
overnodemon
With your current start script, if you make a change to the typescript code it will not recompile automatically, you can fix that with nodemon, but
ts-node-dev
has no need to recompile your code, it will just serve the changed typescript immediately which is obviously much faster.Actually I just noticed you're doing stuff double... because you are using ts-node in your nodemon config you dont need to tsc before running nodemon. ts-node is also much slower than ts-node-dev though and you dont need to have nodemon at all, you can just add a script like this:
"start": "ts-node-dev src/app.ts"
and thats all you need.Thank you for your insights I will check this out for sure
I use babel-node to run typescript project
dev.to/tylim88/babel-node-typescri...
thank you for sharing