template repository for projects using typescript and nodejs.
Template for express, typescript, zod projects.
non-library imports that use absolute path instead of relative.
for ex:
.
├── apps
│ └── server.ts
├── env
│ └── index.ts
├── folder1
│ └── folder2
│ └── a.ts
├── index.ts
└── middlewares
└── logger.middleware.ts
// folder1/folder2/a.ts
// this is a relative import
import { getEnv } from '../../env/index.ts';
// this is an absolute import
import { getEnv } from 'env/index.ts';
tscpaths
and tsconfig-paths
zod
for validating .env
vars.dotenv
for parsing .env
files.morgan
for logging.jest
and supertest
for tests.express
for http server.prettier
for formatting.eslint
for linting and forcing code styles.Absolute imports are not resolved by the default typescript build tool, tscpaths
takes care of it.
if you want to create imports from a folder let's say src/folder1
and name it folder1
add this entry in the tsconfig.json
{
//tsconfig.json
"compilerOptions": {
//...rest of the config
"paths": {
//..other paths
"folder1/*": ["folder1/*"],
},
},
}
you don't need to mention src/folder1/*
because the baseUrl
is set to ./src
which is changeable in the tsconfig.json
//tsconfig.json
{
"compilerOptions": {
"baseUrl": "./src", // <--change here
},
}
just add the key in the envSchema
object in ./src/env/index.ts
and give it the value of z.string()
// ./src/env/index.ts
.
.
.
.
const envSchema = z.object({
// other variables
yourKey: z.string(),
});
Install the dependencies
npm i
create a .env
file from .env.example
cp .env.example .env
Follow the instructions mentioned in setup
for development server
npm run dev
for running production build
npm run build && npm start
using Docker
builidng docker image
docker build -t <image_name> .
running docker image
docker run -e PORT=4000 -p 4000:4000 <image_name>
Note: PORT is an env variable
npm run test
npm run lint