Deploy Nest JS Project ke Vercel

haikelz
Haikel, 2 min read / July 25, 2023

بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ

Pendahuluan

NestJS adalah sebuah NodeJS Framework untuk membangun server side applications. NestJS dirancang dengan menggabungkan konsep-konsep dari beberapa teknologi dan paradigma, termasuk Express.js, TypeScript, dan Object-Oriented Programming (OOP). Tujuannya adalah untuk memberikan fondasi yang kuat dan struktur yang terorganisir untuk membangun aplikasi berbasis Node.js yang scalable dan mudah dikelola.

Proses

Saya asumsikan temen-temen sudah punya project NestJS yang ingin dideploy. Jika belum, silahkan buat terlebih dahulu.

  • Buat file vercel.json di root folder project kita. File inilah yang nantinya akan digunakan Vercel saat mendeploy project NestJS kita.

  • Isikan dengan konfigurasi berikut:

{
  "version": 2,
  "builds": [
    {
      "src": "src/main.ts",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "src/main.ts",
      "methods": ["GET", "POST", "PUT", "DELETE"]
    }
  ]
}
  • Setelah itu, pergi ke dashboard Vercel, klik Add New > Project, dan import project NestJS yang sudah kita push ke Git Repository.

  • Biarkan semua settingan ada di default.

default settings project

Apabila sudah yakin, maka klik Deploy.

Jika ternyata deploy berhasil, tetapi saat diakses, muncul Error 500 seperti ini

src import

maka coba cek lognya terlebih dahulu. Dalam case saya, ada kesalahan saat import file Typescriptnya.

vercel logs

Kemudian saya mengecek cara pengimportan file Typescript dan juga mengecek file tsconfig.json. Rupanya secara default, baseUrl NestJS diset ke ./.

base url tsconfig

Hal ini menyebabkan beberapa file yang diimport dengan awalan src/ tidak terbaca oleh Vercel. Tetapi di development, malah terbaca.

src import

Solusinya: saya ubah dulu baseUrl di file tsconfig.json dari ./ ke ./src. Secara otomatis, Typescript akan memberikan peringatan Error pada file yang diimport dengan awalan src/.

src import error

Jadi tinggal saya fix lagi hingga tidak ada error yang muncul. Setelah itu, coba push perubahan dan deploy kembali.