DEV Community

Hammad Afzal
Hammad Afzal

Posted on

Deploy Your Node.js TypeScript App on Vercel Quickly and Efficiently: A Step-by-Step Guide

Deploying a Node.js app with TypeScript on Vercel can be quick and straightforward — if you set it up correctly. Vercel offers seamless deployment with powerful CI/CD capabilities, making it ideal for modern web applications. This guide will help you navigate the setup process, sidestep common configuration errors, and ensure your deployment is successful.

1. Prerequisites

Before getting started, make sure you have the following:

Vercel Free Account: Sign up here to get started and deploy your apps effortlessly..
Node.js & NPM: Install Node.js if you haven’t already. This will also install npm, essential for running JavaScript packages..
API Setup: Have an existing API ready, or create a simple one.. Check out my reference repository for a quick setup guide that gets you up and running in minutes.

2. Setting Up Your Project

Let’s start by setting up a basic Node.js project with TypeScript.

Step 1: Initialize Your Project

npm init
Enter fullscreen mode Exit fullscreen mode

Step 2: Install Key Packages

Install the essential packages for TypeScript and Node.js development:

npm install express typescript ts-node @types/node @types/express
ts-node-dev
Enter fullscreen mode Exit fullscreen mode
  • express: Minimalist web framework for Node.js, used to set up routing and middleware.
  • typescript: Superset of JavaScript that adds static typing, enhancing code quality and catching errors early.
  • ts-node-dev: Runs TypeScript files with hot-reloading, streamlining the development process.

3. Configure TypeScript (tsconfig.json)

The tsconfig.json file controls how TypeScript compiles your code. Here’s a recommended configuration:

{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "target": "ES6",
    "noImplicitAny": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist",
    "baseUrl": ".",
    "paths": {
      "*": [
        "node_modules/*",
        "src/types/*"
      ]
    }
  },
  "include": [
    "./src/**/*"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Key Configurations Explained:

  • "module": "commonjs": Ensures compatibility with Node.js.
  • "target": "ES6": Compiles code to ES6 standards, allowing modern JavaScript features.
  • "outDir": "dist": Specifies the output folder for compiled files, crucial for Vercel deployments.
  • "paths": Helps alias directories, making imports cleaner and the codebase more maintainable.

4. Set Up Scripts in package.json

Next, configure scripts in your package.json to manage development, build, and deployment workflows effectively:

"scripts": {
  "start": "npx nodemon src/index.ts",
  "dev": "npx nodemon src/index.ts",
  "build:ui": "@powershell Remove-Item -Recurse -Force dist && cd ../frontend && npm run build && @powershell Copy-Item -Recurse dist ../backend",
  "lint": "eslint ."
}
Enter fullscreen mode Exit fullscreen mode

Scripts Overview:

  • start: Runs the app in development mode with live reloading using nodemon.
  • build:ui: Cleans the dist directory, builds the frontend, and copies static files to the backend. This is particularly useful for monorepo setups.
  • lint: Uses ESLint to maintain code quality and consistency by identifying problematic patterns in JavaScript.

5. Vercel Deployment Configuration

Deploying to Vercel requires a vercel.json file to define your build and route configurations. Here's a basic setup:

{
  "version": 2,
  "builds": [
    {
      "src": "dist/index.js",
      "use": "@vercel/node",
      "config": { "includeFiles": ["dist/**"] }
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "dist/index.js"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Configuration Highlights:

  • Builds: Specifies the entry point (dist/index.js) and includes necessary files.
  • Routes: Directs all incoming requests to the main file and handles CORS, which is crucial for cross-origin requests.

6. Common Deployment Issues & Fixes

Deployments often run into a few common issues. Here’s how to tackle them:

Build Failures: Make sure your dist folder is generated correctly. Double-check file paths in vercel.json to ensure all required files are included.
CORS Errors: Modify CORS headers in vercel.json to suit your API’s specific needs, ensuring smooth communication between the frontend and backend.
Missing Dependencies: Verify all dependencies in package.json are installed correctly and up-to-date to prevent build breaks.

7. Conclusion

Deploying a TypeScript-based Node.js app on Vercel can be smooth and efficient with the right configurations. Focus on setting up your tsconfig.json, package.json, and vercel.json accurately to streamline the process. If you need a complete example or further tweaks, feel free to explore my complete codebase here for further reference and tweak the configurations as needed.

Next Steps: Test these configurations locally before deploying to ensure everything works as expected. Follow me for more guides, and don’t hesitate to share your deployment experiences or ask questions!

Happy coding and deploying on Vercel! 🍻

Top comments (0)