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

在Supabase Edge Functions中使用Prisma Client失败,求解决方法

问题分析与解决方案

为什么你的尝试都失败了?

  • 尝试1(createRequire加载CJS):Prisma默认生成的客户端依赖Node.js专属API(比如perf_hooks中的timeOrigin),而Supabase Edge Functions基于Deno runtime,其Node.js兼容层无法完全覆盖这些API,导致运行时 panic。
  • 尝试2(直接导入本地目录):Prisma默认生成的是CommonJS(CJS)模块,没有ESM入口文件,Deno无法识别该目录为合法的ESM模块,因此报错路径问题。
  • 尝试3(导入.d.ts类型文件):.d.ts只是TypeScript类型定义文件,不包含可执行代码,直接导入会导致语法错误,因为类型文件不能作为运行时模块加载。
  • cjs-to-es6转换无效:Prisma客户端并非普通CJS模块,它包含动态生成的代码和对Node.js核心模块的依赖,单纯的语法转换无法解决环境兼容问题。

正确解决方案:生成Prisma Edge兼容客户端

Supabase Edge Functions基于Deno runtime,必须使用Prisma专门为Edge环境优化的客户端版本,步骤如下:

1. 修改schema.prisma配置

更新generator部分,启用Edge模式并指定适配Supabase的二进制目标:

generator client {
  provider        = "prisma-client-js"
  output          = "./../supabase/functions/_shared/prisma-client"
  edge            = true  // 启用Edge兼容模式
  binaryTargets   = ["native", "rhel-openssl-1.0.x"]  // Supabase Edge runtime的二进制目标
}

datasource db {
  provider  = "postgresql"
  url       = env("DATABASE_URL")
  directUrl = env("DIRECT_URL")
}

model Users {}

2. 重新生成Prisma客户端

运行以下命令生成Edge兼容的客户端:

npx prisma generate

3. 在Edge Function中导入并使用客户端

生成的客户端会包含edge.js入口文件,直接用ESM语法导入即可:

import { serve } from 'https://deno.land/std@0.192.0/http/server.ts'
import { PrismaClient } from '../_shared/prisma-client/edge.js'

// 初始化Prisma Client,从环境变量读取数据库链接
const prisma = new PrismaClient({
  datasources: {
    db: {
      url: Deno.env.get('DATABASE_URL'),
    },
  },
})

serve(async (_req: Request) => {
  try {
    const users = await prisma.users.findMany()
    return new Response(JSON.stringify(users), {
      headers: { 'Content-Type': 'application/json' },
    })
  } catch (error) {
    return new Response(JSON.stringify({ error: error.message }), {
      status: 500,
      headers: { 'Content-Type': 'application/json' },
    })
  } finally {
    await prisma.$disconnect() // 确保关闭数据库连接
  }
})

4. 配置Supabase环境变量

在Supabase Dashboard的项目设置 → 环境变量中,添加DATABASE_URL和DIRECT_URL,值可以从Prisma配置或Supabase的数据库连接页面获取。

内容的提问来源于stack exchange,提问作者Aaron3219

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:23:31