NestJS+Prisma部署Serverless报错:找不到./prisma/client/index模块
问题分析与解决办法
错误原因
这个报错的核心是Serverless部署包中缺少Prisma Client的生成文件,或者Lambda运行时的模块解析路径与本地环境不匹配。Prisma Client需要通过prisma generate命令生成,默认存放在node_modules/@prisma/client目录,但Serverless打包工具(如serverless-jetpack)可能未正确包含该目录,导致Lambda运行时找不到模块。
具体解决步骤
1. 确保构建时预生成Prisma Client
修改package.json的build脚本,在NestJS构建前先执行Prisma Client生成命令,保证构建产物包含最新的Client文件:
"scripts": { "build": "prisma generate && nest build" }
2. 配置Serverless打包工具包含Prisma Client
在serverless.yml中添加serverless-jetpack的include规则,强制将Prisma Client目录纳入部署包:
custom: jetpack: include: - node_modules/@prisma/client/**
3. 自定义Prisma Client生成路径(推荐方案)
将Prisma Client生成到项目源码目录,让NestJS构建时自动将其打包到dist目录,避免依赖node_modules的路径问题:
- 修改
prisma/schema.prisma的generator配置:generator client { provider = "prisma-client-js" output = "../src/prisma/client" } - 更新Prisma Service的导入路径:
import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PrismaClient } from './client'; // 对应自定义生成路径 @Injectable() export class PrismaService extends PrismaClient { constructor(config: ConfigService) { super({ datasources: { db: { url: config.get('DATABASE_URL'), }, }, }); } } - 重新执行
prisma generate和npm run build后再部署。
4. 确认Lambda环境变量配置
在serverless.yml中明确注入DATABASE_URL环境变量,确保Lambda运行时能正确连接数据库:
provider: name: aws runtime: nodejs16.x region: us-east-2 environment: DATABASE_URL: ${env:DATABASE_URL}
5. 验证部署包内容
执行sls package生成部署包,解压后检查是否包含Prisma Client相关文件(无论是node_modules/@prisma/client还是自定义生成的src/prisma/client目录),确认文件路径与代码导入路径一致。
内容的提问来源于stack exchange,提问作者user17817361
相关产品推荐
相关产品推荐

