Prisma Client执行报错:this.engine.dmmf is not a function 求助
排查Prisma脚本运行时
TypeError: this.engine.dmmf is not a function错误 问题场景
我有一个数据库填充脚本lifeseed.ts,通过node ./lifeseed.ts运行,代码如下:
const { PrismaClient } = require('@prisma/client'); const { faker } = require('@faker-js/faker'); const prisma = new PrismaClient(); main(); async function main() { console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Starting 2,999 Coin Transaction Seed Function"); for (let i=0; i<=5; i++) { await prisma.coinTransaction.create({ data: { userId: 1, coinId: 1, paymentId: 'test'+faker.datatype.uuid(), checkoutSessionCompleted: new Date('1-1-1969') } }); } console.log("Seed Function Completed"); };
运行后报错:
PS C:\Users\jonat\facti\server\prisma\seeds> node .\lifeseed.ts Starting AI Community Seed Function C:\Users\jonat\facti\server\node_modules\@prisma\client\runtime\index.js:27892 return JSON.parse(await this.engine.dmmf()); ^ TypeError: this.engine.dmmf is not a function at LibraryEngine.getDmmf (C:\Users\jonat\facti\server\node_modules\@prisma\client\runtime\index.js:27892:41) at async C:\Users\jonat\facti\server\node_modules\@prisma\client\runtime\index.js:35539:24 at async PrismaClient._executeRequest (C:\Users\jonat\facti\server\node_modules\@prisma\client\runtime\index.js:36111:22) at async PrismaClient._request (C:\Users\jonat\facti\server\node_modules\@prisma\client\runtime\index.js:36082:16) at async C:\Users\jonat\facti\server\prisma\seeds\lifeseed.ts:107:29 { clientVersion: '4.8.0' }
可能的原因及解决方法
1. 重新生成Prisma Client
Prisma Client依赖根据schema.prisma生成的代码,若生成不完整会导致引擎方法缺失:
- 执行命令重新生成:
npx prisma generate - 确保生成过程无报错,若有错误先修复
schema.prisma中的问题。
2. 升级Prisma版本
你使用的4.8.0版本存在已知的引擎兼容bug,升级到最新稳定版可解决:
- 执行升级命令:
npm install prisma@latest @prisma/client@latest - 升级完成后再次执行
npx prisma generate。
3. 修复损坏的依赖文件
若引擎文件因安装异常损坏,可重新安装依赖:
- 删除
node_modules和锁文件:rm -rf node_modules package-lock.json - 重新安装依赖:
npm install - 再执行
npx prisma generate确保引擎正确加载。
4. 正确运行TypeScript脚本
直接用node运行.ts文件未经过编译,可能导致模块加载异常:
- 方式一:先编译再运行
npx tsc lifeseed.ts node lifeseed.js - 方式二:用
ts-node直接运行npx ts-node lifeseed.ts
5. 优化Prisma实例的初始化与销毁
添加错误捕获和实例断开逻辑,避免资源泄漏:
async function main() { try { console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Starting 2,999 Coin Transaction Seed Function"); for (let i=0; i<=5; i++) { await prisma.coinTransaction.create({ data: { userId: 1, coinId: 1, paymentId: 'test'+faker.datatype.uuid(), checkoutSessionCompleted: new Date('1-1-1969') } }); } console.log("Seed Function Completed"); } catch (e) { console.error(e); process.exit(1); } finally { await prisma.$disconnect(); } }; main();
内容的提问来源于stack exchange,提问作者rockets4all
相关产品推荐
相关产品推荐

