Vercel部署Next.js+Prisma+Supabase后端项目构建失败(已尝试CI=false仍报错)
Vercel部署Next.js+Prisma+Supabase后端项目构建失败(已尝试CI=false仍报错)
我太懂你现在的糟心程度了——明明本地跑的好好的,部署到Vercel就一堆模块找不到、Prisma Client报错的问题,哪怕设了CI=false也没辙。咱们针对你遇到的几个核心报错逐个拆解解决:
1. 解决「Cannot find module 'express'」报错
你提到还有部分Express逻辑没完全重构,那大概率是代码里还残留了import express from 'express'这类语句,但你的package.json里根本没把express加到依赖里!
有两个解决方向:
- 彻底清理Express依赖:把还没重构完的Express代码全部改成Next.js API路由的写法,删掉所有express相关的导入和逻辑,这样就不需要装这个依赖了;
- 添加Express依赖:如果暂时没法完全重构,直接在项目根目录执行
npm install express,然后把express加到package.json的dependencies里,部署时Vercel就会自动安装它。
2. 解决「Module '@prisma/client' has no exported member 'PrismaClient'」报错
这个问题90%是因为Vercel部署时没自动生成Prisma Client!你本地跑npx prisma generate没问题,但Vercel的构建流程默认不会帮你执行这个命令。
你需要修改package.json里的build脚本,把Prisma生成命令加进去:
{ "scripts": { "dev": "next dev", "build": "prisma generate && next build" } }
这样Vercel执行构建时,会先自动生成Prisma Client,之后再跑Next.js的build命令,就不会找不到PrismaClient了。
另外还要确认:
- Vercel项目的环境变量里已经正确配置了
DATABASE_URL,而且要勾选「Production」环境(别只加在Development里); - 你的
schema.prisma里的datasource配置是正确的,你现在的写法没问题:datasource db { provider = "postgresql" url = env("DATABASE_URL") }
3. 解决「Cannot find module '../../pages/api/orders' when reusing handlers」报错
这个是路径解析或者Next.js API路由的特殊性导致的——API路由文件是Next.js的特殊文件,直接导入整个路由文件容易出路径问题,而且也不符合代码复用的最佳实践。
建议你把订单的核心逻辑抽离成单独的函数:
- 在
lib目录下新建orders.ts,把创建订单的逻辑抽出来:
import prisma from './prisma'; export async function createOrder(product: string, quantity: number) { return await prisma.orders.create({ data: { product, quantity } }); }
- 然后在
pages/api/orders.ts里导入这个函数:
import { createOrder } from '../../lib/orders'; export default async function handler(req, res) { try { const newOrder = await createOrder('Apple', 5); res.status(200).json(newOrder); } catch (error) { res.status(500).json({ error: error.message }); } }
- 其他需要复用这个逻辑的地方,直接导入
lib/orders.ts里的createOrder函数就行,不要再导入整个API路由文件了。
如果一定要导入路由文件,那得仔细检查相对路径是否正确——比如你在services/xxx.ts里导入的话,路径是不是../pages/api/orders而不是../../pages/api/orders?
额外的Vercel部署注意事项
- 检查你的
tsconfig.json的include字段,如果新增了services这类目录,要把它加进去,不然TypeScript编译时会找不到这些文件:"include": ["pages", "lib", "services"] - 确保Vercel的Build Command是用你
package.json里的build脚本,不要手动改成其他命令; - 部署前可以本地先跑一遍
npm run build,看看会不会出现同样的报错,这样能提前在本地排查问题,不用每次都等Vercel部署失败。
内容来源于stack exchange
相关产品推荐
相关产品推荐

