You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的特殊文件,直接导入整个路由文件容易出路径问题,而且也不符合代码复用的最佳实践。

建议你把订单的核心逻辑抽离成单独的函数:

  1. 在lib目录下新建orders.ts,把创建订单的逻辑抽出来:
import prisma from './prisma';

export async function createOrder(product: string, quantity: number) {
  return await prisma.orders.create({
    data: { product, quantity }
  });
}
  1. 然后在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 });
  }
}
  1. 其他需要复用这个逻辑的地方,直接导入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:38:03