Overview
TEN stack is a Typescript
+ Express
+ Node
starter kit to develop REST API
server apps.
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
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
andnpm
oryarn
installed in your system.
- Set your
git remote add origin
path
git remote add origin ${forked-and-cloned-path}
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
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';
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
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
Then, use pm2
to start the application as a service.
yarn service:start # or npm run service:start
Contribution
Check the source here
Please feel free to open an issue
or a pull request
to suggest changes or additions.
Top comments (2)
Congrats.
I suggest to put package-lock.json in your repository. Without that, you can have unexpected behavior.
Thanks for the advice, you can't be more right about that 👍