When using prisma in nuxtjs, I encountered many problems, some of which were related to nuxtjs and some were not. Finally, I found a way to make prisma work properly.
Issues I Encountered
- When using Prisma with NuxtJS, development mode works fine, but build fails, or build succeeds but running the build result fails.
- Invalid module ".prisma/client/index-browser" is not a valid package name.
- FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory.
- nitro 23:49:44 ERROR TypeError ERR_INVALID_MODULE_SPECIFIER: Invalid module ".prisma" is not a valid package name.
- Error validating datasource
db
: the URL must start with the protocolprisma://
. __dirname is not defined in es module scope.
Table Doesn’t Exist in Database.
Solutions
- Stop using
@prisma/nuxt
. Current versions:@prisma/nuxt@0.3.0
,prisma@6.7.0
. - Install dependencies:
npm install prisma @prisma/client
. - Place the
prisma
folder in the project root. Key configuration inprisma/schema.prisma
:generator client { provider = "prisma-client-js" output = "../node_modules/_db" }
Official recommendation for output: Required for Prisma 7. This configuration works on Linux but fails on Windows. Use the exact path above; placing it outside node_modules may cause new errors. - Add these scripts to package.json for Prisma operations:
"scripts": { "prisma:reset": "prisma migrate reset", "prisma:migrate": "prisma migrate dev", "prisma:generate": "prisma generate" }
After modifying prisma/schema.prisma, run npm run prisma:generate to regenerate../node_modules/_db
. - Create a singleton for Prisma (optional). Example: server/utils/db.ts
import { PrismaClient } from "_db"; export * from "_db"; const prismaClientSingleton = () => { return new PrismaClient(); }; declare const globalThis: { prismaGlobal: ReturnType<typeof prismaClientSingleton>; } & typeof global; export const prisma = globalThis.prismaGlobal ?? prismaClientSingleton(); if (process.env.NODE_ENV !== "production") globalThis.prismaGlobal = prisma;
- Usage:
- Import singleton:
import { prisma } from "~/server/utils/db"
- Import TypeScript types:
import { User, Post } from "~/server/utils/db"
- Without singleton:
import { PrismaClient } from "_db"
- Import singleton:
- Additional Notes:
- For SQLite, use absolute paths for the database file to avoid build issues.
- Works with npm and pnpm (other package managers untested).