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 protocol prisma://.
  • __dirname is not defined in es module scope.
  • Table Doesn’t Exist in Database.

Solutions

  1. Stop using @prisma/nuxt. Current versions: @prisma/nuxt@0.3.0, prisma@6.7.0.
  2. Install dependencies: npm install prisma @prisma/client.
  3. Place the prisma folder in the project root. Key configuration in prisma/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.
  4. 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.
  5. 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;
    
  6. ​​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"
  7. Additional Notes:
    • For SQLite, use ​​absolute paths​​ for the database file to avoid build issues.
    • Works with npm and pnpm (other package managers untested).