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';
- support for absolute imports in both development and build using
tscpaths
andtsconfig-paths
zod
for validating.env
vars.dotenv
for parsing.env
files.morgan
for logging.jest
andsupertest
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 itfolder1
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 thebaseUrl
is set to./src
which is changeable in thetsconfig.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 ofz.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