{
"scripts": {
"vercel-build": "prisma generate && prisma migrate deploy && nest build"
}
}
package.json에 vercel-build를 추가하면 알아서 deploy시 실행한다.
{
"builds": [
{
"src": "src/main.ts",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "src/main.ts",
"methods": ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"]
}
]
}
{projectRoot}/vercel.json에 위와 같이 추가한다.
generator client {
provider = "prisma-client-js"
output = "./generated/client"
}
공식 문서에 따르면 output을 명시하는 것을 강력히 권장한다곤 하나, 이렇게 하면 prisma를 import할 때,
import { PrismaClient } from './generated/prisma';
@Injectable()
export class PostsService {
private prisma = new PrismaClient();
}
위와 같이 path가 되는데, prisma project를 cli로 만들 때 자동으로 .gitignore에 /generated/prisma를 추가하기 때문에 이러면 vercel에서 deploy할 때 알 수 없다고 에러가 발생하게 된다.
따라서, output을 제거하여 기본값인 node_modules/@prisma/client 내에 prisma client를 generate되게 하여
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PostsService {
private prisma = new PrismaClient();
}
위와 같은 코드로 만들어줄 경우, npm i @prisma/client를 통해 dependencies에 추가해준다면, deploy시 에러가 나지 않는다.
vercel에서 environment variable에 .env 파일에 있는 DATABASE_URL를 추가해줘야한다.
참고: https://www.prisma.io/docs/orm/prisma-client/deployment/serverless/deploy-to-vercel