独立API项目调用含Prisma的后端库时遇初始化错误求解
解决类库中Prisma Client未初始化的问题
问题场景
- 项目1:Essentials(类库),封装所有数据库CRUD操作,依赖
@prisma/client与数据库交互 - 项目2:Api(Next.js项目),仅调用Essentials类库的函数提供接口
调用接口时触发以下错误:
ready - started server on 0.0.0.0:3001, url: http://localhost:3001 info - SWC minify release candidate enabled. https://nextjs.link/swcmin info - automatically enabled Fast Refresh for 1 custom loader event - compiled client and server successfully in 235 ms (178 modules) wait - compiling... event - compiled client and server successfully in 43 ms (178 modules) wait - compiling /api/register... event - compiled successfully in 22 ms (42 modules) error - Error: @prisma/client did not initialize yet. Please run "prisma generate" and try to import it again. In case this error is unexpected for you, please report it in https://github.com/prisma/prisma/issues at new PrismaClient (/home/roringo1/Desktop/antique-collection-local-2/antique-api/node_modules/.prisma/client/index.js:3:11) at Object.<anonymous> (/home/roringo1/Desktop/antique-collection-local-2/antique-api/node_modules/antique-essentials/build/lib/prisma.js:5:35) at Module._compile (node:internal/modules/cjs/loader:1126:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10) at Module.load (node:internal/modules/cjs/loader:1004:32) at Function.Module._load (node:internal/modules/cjs/loader:839:12) at Module.require (node:internal/modules/cjs/loader:1028:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (/home/roringo1/Desktop/antique-collection-local-2/antique-api/node_modules/antique-essentials/build/registerAccount.js:37:18) at Module._compile (node:internal/modules/cjs/loader:1126:14)
已尝试next-transpile-modules但无效,以下是可行解决方案:
解决方案
1. 调整类库的Prisma生成路径
在Essentials项目的prisma/schema.prisma中指定生成的Prisma Client输出到类库的构建目录,确保Api项目能正确读取:
generator client { provider = "prisma-client-js" output = "../build/lib/prisma-client" // 指向类库编译后的输出目录 }
执行npx prisma generate重新生成客户端,确认文件生成在指定路径下。
2. 确保类库打包包含Prisma Client文件
- 若用TypeScript,在
tsconfig.json中添加生成的Prisma路径到include:{ "include": ["src/**/*", "build/lib/prisma-client/**/*"] } - 若用webpack,添加复制插件将Prisma Client文件同步到构建目录:
const CopyPlugin = require('copy-webpack-plugin'); module.exports = { plugins: [ new CopyPlugin({ patterns: [{ from: './prisma/client', to: './lib/prisma-client' }] }) ] };
3. 延迟实例化Prisma Client
避免在类库的模块顶层直接实例化PrismaClient,改用延迟加载或单例模式:
// 单例模式示例 let prismaInstance; export function getPrisma() { if (!prismaInstance) { prismaInstance = new PrismaClient(); } return prismaInstance; }
4. 检查依赖配置
- 确保Essentials的
package.json中@prisma/client在dependencies而非devDependencies,保证Api项目安装类库时自动引入该依赖 - 在Api项目根目录执行
npm install或yarn install更新依赖
5. 备选:在Api项目中重新生成Prisma Client
如果类库配置无法调整,可在Api项目中同步Essentials的schema,然后执行npx prisma generate,确保Api项目的node_modules/.prisma/client存在有效文件。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

