Prisma集成Serverless AWS-NodeJS-TypeScript模板本地运行报错排查
问题
使用Serverless Framework构建无服务器函数,采用aws-nodejs-typescript模板(依赖serverless-esbuild而非serverless-webpack)。按照Prisma官方AWS Lambda示例执行npx prisma generate && npm install后,运行sls invoke local -f main时出现如下错误:
Error: ENOENT: no such file or directory, open ''/.esbuild/.build/node_modules/.prisma/client/schema.prisma'
当前相关配置:
prisma/schema.prisma中的generator配置:
generator client { provider = "prisma-client-js" binaryTargets = ["native", "rhel-openssl-1.0.x"] }
serverless.ts中的package配置:
package: { individually: true, patterns: [ "!node_modules/.prisma/client/libquery_engine-*", "node_modules/.prisma/client/libquery_engine-rhel-*", "!node_modules/prisma/libquery_engine-*", "!node_modules/@prisma/engines/**", ], },
解决方案
1. 补充schema.prisma的打包规则
当前package配置的patterns里没有包含schema.prisma,但Prisma Client运行时需要读取该文件,必须将其加入打包列表:
package: { individually: true, patterns: [ // 新增这一行 "prisma/schema.prisma", "!node_modules/.prisma/client/libquery_engine-*", "node_modules/.prisma/client/libquery_engine-rhel-*", "!node_modules/prisma/libquery_engine-*", "!node_modules/@prisma/engines/**", ], },
2. 修正Prisma路径解析问题
serverless-esbuild会将文件打包到.esbuild/.build目录,Prisma可能无法自动识别schema的位置。可以通过两种方式解决:
- 生成Client时显式指定schema路径:
npx prisma generate --schema=./prisma/schema.prisma
- 在serverless配置中添加环境变量,指定schema路径:
provider: { environment: { PRISMA_SCHEMA_PATH: './prisma/schema.prisma' } }
3. 优化引擎文件匹配规则
当前的libquery_engine-rhel-*匹配范围太宽,建议精确匹配AWS Lambda需要的版本,避免打包多余文件:
"node_modules/.prisma/client/libquery_engine-rhel-openssl-1.0.x*",
4. 重新执行构建流程
修改配置后,清理旧构建产物并重新生成Client:
rm -rf .esbuild npx prisma generate sls invoke local -f main
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

