侧边栏壁纸
博主头像
MicroMatrix 博主等级

明月别枝惊鹊,清风半夜鸣蝉

  • 累计撰写 122 篇文章
  • 累计创建 38 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

在 Nuxt4 中让 Prisma 正常工作

David
2025-10-08 / 1 评论 / 1 点赞 / 36 阅读 / 0 字

在 Nuxt.js 中使用 Prisma 时,你可能会踩上一堆坑:
开发模式一切正常,但一到构建或部署阶段,Prisma 就开始“罢工”。
本文将手把手带你配置 Nuxt.js + Prisma,确保开发与生产环境都能正常运行。


😵‍💫 我遇到的问题

在尝试把 Prisma 集成进 Nuxt.js 时,我遇到了这些“经典报错”:

  • Invalid module ".prisma/client/index-browser" is not a valid package name.
  • 💥 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory.
  • 🚨 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.

每一条都像是一个新世界的大门,最后的解决方案是 —— 不用官方的 @prisma/nuxt 插件!


✅ 最终解决方案

放弃使用 @prisma/nuxt

在测试时,我使用的版本是:

@prisma/nuxt@0.3.0
prisma@6.17.0

这个组合问题多多,尤其在构建阶段。因此我们直接绕过它。

安装必要依赖

直接安装 Prisma 核心包与客户端:

npm install prisma @prisma/client

设置 Prisma 输出路径

prisma 文件夹放在项目根目录下。
prisma/schema.prisma 中,修改生成配置如下:

generator client {
  provider = "prisma-client-js"
  output   = "../node_modules/_db"
}

📝 注意事项:

  • Prisma 7 必须配置 output 路径,否则会在构建中出错。
  • 在 Linux 上默认路径可用,但在 Windows 环境下必须自定义输出
  • 请务必使用上方路径,不要修改成别的目录。
    如果输出到 node_modules 以外,构建时会报奇怪的错误。

package.json 添加实用命令

"scripts": {
  "prisma:reset": "prisma migrate reset",
  "prisma:migrate": "prisma migrate dev",
  "prisma:generate": "prisma generate"
}

每次修改 schema.prisma 文件后,务必运行:

npm run prisma:generate

这会在 node_modules/_db 下生成 Prisma 客户端。


创建 Prisma 单例文件

server/utils/db.ts 中新建以下内容:

import { PrismaClient } from "_db";
export * from "_db";

const prismaClientSingleton = () => 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;

这样可以确保 Prisma 客户端在开发时只创建一个实例,避免连接过多导致警告。


引用方式

如果你使用单例:

import { prisma } from "~/server/utils/db";

如果只想直接使用客户端类型:

import { User, Post } from "~/server/utils/db";

如果没有创建 server/utils/db 文件,也没关系:

import { PrismaClient } from "_db";

额外小贴士

  • 💡 SQLite 用户注意:
    数据库文件路径最好使用绝对路径,否则构建后可能找不到数据库文件。
  • 💪 包管理工具:
    npmpnpm 都测试通过。
    其他工具(如 yarn、bun)未测试,但原则上类似。

🎉 总结

环节 操作
安装依赖 npm install prisma @prisma/client
配置输出 output = "../node_modules/_db"
生成客户端 npm run prisma:generate
引用单例 import { prisma } from "~/server/utils/db"
生产环境稳定运行

通过以上步骤,你就能在 Nuxt.js 中优雅且稳定地使用 Prisma
无论是开发、构建、部署,都不会再出现那些莫名其妙的错误了 🎯

💬 如果你也被 Prisma + Nuxt 折磨过,不妨试试这套方案。

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区