在 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 用户注意:
数据库文件路径最好使用绝对路径,否则构建后可能找不到数据库文件。 - 💪 包管理工具:
npm和pnpm都测试通过。
其他工具(如 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 折磨过,不妨试试这套方案。
评论区