Serverless部署Express+TS+Prisma应用时遇schema.prisma缺失错误
解决Serverless部署Express+TypeScript+Prisma时找不到schema.prisma的问题
问题分析
部署后出现ENOENT: no such file or directory, open '/var/task/src/schema.prisma'错误,核心原因是部署包未包含schema.prisma文件,且Prisma客户端引擎未正确打包到Serverless运行环境中。本地运行正常是因为本地保留了完整的Prisma文件结构。
解决方案
1. 调整serverless-bundle配置,强制包含Prisma相关文件
修改serverless.yml中的custom.bundle配置,添加includeFiles字段,确保schema文件和Prisma生成的客户端文件被纳入部署包:
custom: # ... 其他原有配置 bundle: linting: false excludeFiles: "**/*.test.ts" includeFiles: - "src/schema.prisma" # 包含你的schema定义文件 - "node_modules/.prisma/client/**/*" # 包含Prisma生成的客户端及引擎文件
2. 绑定Prisma生成命令到部署流程
部署前必须执行prisma generate生成适配Serverless环境的客户端,将命令整合到部署脚本中避免遗漏:
在项目根目录的package.json中添加脚本:
"scripts": { "deploy": "npx prisma generate && serverless deploy" }
后续部署时使用npm run deploy代替直接执行serverless deploy。
3. 显式指定Prisma schema路径(可选)
在初始化PrismaClient时,通过绝对路径指定schema文件位置,避免部署环境下路径解析偏差:
// app.ts(或app.js) import { PrismaClient } from '@prisma/client'; import path from 'path'; const prisma = new PrismaClient({ schema: path.join(__dirname, 'schema.prisma'), });
4. 调整插件加载顺序
确保serverless-webpack-prisma在serverless-bundle之后加载,保证插件能正确处理打包后的Prisma文件:
plugins: - serverless-dotenv-plugin - serverless-bundle - serverless-webpack-prisma - serverless-offline
5. 验证打包结果
运行serverless package生成部署包,解压后检查以下内容:
/var/task/src/目录下是否存在schema.prismanode_modules/.prisma/client目录下是否包含对应Linux环境的引擎文件(如libquery_engine-linux-arm64-openssl-1.1.x.so.node)
内容的提问来源于stack exchange,提问作者Martins Pereira
相关产品推荐
相关产品推荐

