部署Vercel时Prisma Client找不到rhel-openssl-3.0.x查询引擎
解决Prisma 6.6.0 + Next.js 15.3.1部署到Vercel时的Query Engine找不到问题
问题核心原因
Vercel运行环境基于RHEL系统,本地生成的Prisma客户端默认仅包含当前系统的引擎文件;同时自定义的Prisma Client输出路径(../generated/prisma)未被Next.js打包流程正确识别,导致运行时找不到对应环境的引擎文件。
解决方案
1. 指定Prisma生成适配Vercel环境的引擎
在schema.prisma的generator配置中添加binaryTargets,同时兼容本地环境和Vercel的RHEL环境:
generator client { provider = "prisma-client-js" output = "../generated/prisma" // 若后续改用默认路径则删除此行 binaryTargets = ["native", "rhel-openssl-3.0.x"] }
native:保证本地开发环境正常运行rhel-openssl-3.0.x:适配Vercel的运行系统
2. 确保引擎文件被Next.js打包包含
有两种方案可选,优先推荐方案一(更简洁):
方案一:使用Prisma默认输出路径
修改schema.prisma,删除自定义的output配置,使用默认的.prisma/client路径:
generator client { provider = "prisma-client-js" }
然后更新Prisma Client的导入路径:
import { PrismaClient } from "@prisma/client"; const globalForPrisma = global as unknown as { prisma: PrismaClient; }; const prisma = globalForPrisma.prisma || new PrismaClient(); if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma; export default prisma;
Next.js默认会处理.prisma/client目录下的文件,无需额外配置。
方案二:保留自定义输出路径,配置Webpack复制引擎文件
若需保留../generated/prisma输出路径,需安装copy-webpack-plugin并修改Next.js配置:
- 安装依赖:
npm install copy-webpack-plugin --save-dev
- 在
next.config.js中添加Webpack配置:
const CopyPlugin = require('copy-webpack-plugin'); /** @type {import('next').NextConfig} */ const nextConfig = { webpack: (config) => { config.plugins.push( new CopyPlugin({ patterns: [ // 复制所有平台的引擎文件到打包后的对应目录 { from: './generated/prisma/libquery_engine-*.so.node', to: 'generated/prisma/[name][ext]', }, { from: './generated/prisma/libquery_engine-*.dll.node', to: 'generated/prisma/[name][ext]', }, { from: './generated/prisma/libquery_engine-*.dylib', to: 'generated/prisma/[name][ext]', }, ], }) ); return config; }, }; module.exports = nextConfig;
3. 验证并重新部署
- 确认
package.json的build脚本为prisma generate && next build(当前配置已正确) - 登录Vercel控制台,触发新部署时勾选Skip Cache,避免旧缓存文件干扰
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

