DEV Community

Cover image for TEN Stack: Typescript-Express-Node template (Updated 2022)
filoscoder
filoscoder

Posted on • Edited on

TEN Stack: Typescript-Express-Node template (Updated 2022)

Overview

TEN stack is a Typescript + Express + Node starter kit to develop REST API server app.
Nothing new under the sun, just a straight forward combo to make server development a little bit faster. This template is perfect for anyone who is starting on the server-side world based on Node.js

This template comes with:

  • Class-based OOP architecture with DI & DAO (scalable)
  • Equipped for TDD with Jest
  • Everything strictly typed with Typescript
  • ES6 features/modules
  • ES7 async / await
  • Global error handling architecture with templates (ApiError, TimeOutError, ValidationError, etc)
  • Request validation as custom middleware with Express-validator
  • Blazing fast logging with Express-Pinno-Logger
  • Run with Nodemon for automatic reload & watch
  • ESLint for code linting
  • Code formatting using Prettier
  • Configuration management using dotenv
  • Improved commits with Husky(v8) - pre-commit & pre-push
  • Manage production app process with PM2
  • CI/CD workflows with Github Actions
  • Editable Github Pull requests & Issue templates

Prerequisites

Install

  • Fork or Use this template repository.
  • Clone the forked repository.
  • Install the dependencies with yarn or npm.

Make sure you already have node.js and npm or yarn installed in your system.

  • Set your git remote add origin path
 git remote add origin ${forked-and-cloned-path}
Enter fullscreen mode Exit fullscreen mode

Update the url if you already have an origin

Config

  • Copy .env.example a file at the root of the application.
  • Add or modify specific variables and update it according to your need.
 cp .env.example .env
Enter fullscreen mode Exit fullscreen mode

Check the config folder to customize your settings (/src/config)

Alias @

To make paths clean and ease to access @ is setup up for /src path

// BEFORE
import config from './config';
import routes from './routes';

// NOW
import config from '@/config';
import routes from '@/routes';
Enter fullscreen mode Exit fullscreen mode

You can customize this setup:
/tsconfig.json > compilerOptions.baseUrl & compilerOptions.paths

Local Development

Run the server locally. It will be run with Nodemon and ready to serve on port 8080 (unless you specify it on your .env)

 yarn start # or npm start
Enter fullscreen mode Exit fullscreen mode

Check package.json to see more "scripts"

Continuous Integration & Continuous Deploy (CI/CD)

The workflows are under the .github folder
CI will be triggered on every PR update
CD will be triggered when specified branches got pushed (ex. main , develop)

If need more info about the setting, check this article

Production

First, build the application.

 yarn build # or npm run build
Enter fullscreen mode Exit fullscreen mode

Then, use pm2 to start the application as a service.

 yarn service:start # or npm run service:start
Enter fullscreen mode Exit fullscreen mode

Contribution

Check the source here
Please feel free to open an issue or a pull request to suggest changes or additions.

Top comments (0)