Nest.jsをVercelにデプロイした時の設定&注意点まとめ

この記事はNest.jsの話です。Next.jsではありませんのでご注意ください!

はじめに

Nest.jsを簡単に動かす環境が欲しいな〜と思い、Vercelが個人的に使いやすく好きなのでデプロイしてみました。

設定

vercel.jsonをルートに設置します。

{
  "version": 2,
  "builds": [
    {
      "src": "src/main.ts",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "src/main.ts"
    }
  ]
}

package.jsonに1行追記します。

  "scripts": {
    "build": "nest build",
    "vercel-build": "tsc && npm run lint && npm run test && prisma generate && npm run build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },

prismaを使わない場合は、prisma generateの箇所は不要です。

これでgithubにあげ、vercelとgithubを連携させます。

pushすると動いてくれるようになります!!!

注意点

パスエイリアスの設定がうまく動きませんでした。

tsconfig.json

    "paths": {
      "@src/*": ["src/*"]
    }

このように、src配下にエイリアスを指定したのですが、

Cannot find module '@src/users/users.service'
Require stack:
- /var/task/src/auth/auth.service.js
- /var/task/src/auth/auth.module.js
- /var/task/src/app.module.js
- /var/task/src/main.js

のようにパスが見つからないのか、500エラーで動かず。。。

vercel.jsonのビルドパス設定したら直るやつかも???🤔