如何在Supabase边缘函数中正确使用database.types.ts?
解决Supabase边缘函数找不到database.types.ts的问题
因为Supabase边缘函数运行时的文件上下文被限制在对应函数的目录(/supabase/functions/api/)内,根目录的文件默认不会被加载,所以跨目录导入会失败。以下是几种实用的解决方法:
方法一:手动复制类型文件到函数目录
- 将根目录的
database.types.ts复制到/supabase/functions/api/目录下 - 修改函数中的导入路径:
import { createClient } from "jsr:@supabase/supabase-js@2.45.6"; import { Database } from "./database.types.ts"; export function supabaseClient() { const url = Deno.env.get('SUPABASE_URL'); const serviceRoleKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY'); return createClient<Database>(url!, serviceRoleKey!); }
优点:操作简单,无需额外配置;缺点:每次更新数据库 schema 生成新的类型文件后,需要手动同步复制。
方法二:修改类型生成命令,直接输出到函数目录
每次生成类型时,指定输出路径为函数目录,避免手动复制:
supabase gen types typescript --project-id 你的项目ID > supabase/functions/api/database.types.ts
之后更新类型只需重新执行该命令即可,自动覆盖函数目录下的文件。
方法三:通过Deno导入映射配置路径(进阶)
- 在根目录创建
import_map.json文件,添加类型文件的映射:
{ "imports": { "@/database.types": "../database.types.ts" } }
- 在函数目录的
deno.json(如果没有则创建)中指定导入映射:
{ "importMap": "../../import_map.json" }
- 修改函数中的导入语句:
import { Database } from "@/database.types";
注意:使用此方法时,需要确保Supabase CLI在运行函数时能识别导入映射,部分场景下可能需要在启动命令中添加--import-map参数:
supabase functions serve api --import-map ../../import_map.json
优点:无需复制文件,类型文件统一管理;缺点:配置相对复杂,需要维护导入映射文件。
内容的提问来源于stack exchange,提问作者Schnitzler
相关产品推荐
相关产品推荐

