supabaseUrl 是必需的

equ*_*qui 4 javascript svelte supabase sveltekit

我遇到这个问题已经有一段时间了,想要解决这个问题:根据supbase文档,您创建了一个.env文件

VITE_SUPABASE_URL="YOUR_SUPABASE_URL"
VITE_SUPABASE_ANON_KEY="YOUR_SUPABASE_KEY"
Run Code Online (Sandbox Code Playgroud)

然后你在supabaseClient.js中调用它们:

import { createClient } from '@supabase/supabase-js'

const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY

export const supabase = createClient(supabaseUrl, supabaseAnonKey)
Run Code Online (Sandbox Code Playgroud)

然而这不起作用,我得到supabaseUrl是必需的。并且环境变量没有被导出。

有谁知道为什么以及如何解决它?

我需要安装任何额外的库吗?

先感谢您

Lef*_*ium 6

SvelteKit 最近添加了新的商店来导入环境变量,例如$env/static/private. 使用方法:

# .env 文件
PUBLIC_SUPABASE_URL="YOUR_SUPABASE_URL"
PUBLIC_SUPABASE_ANON_KEY="YOUR_SUPABASE_KEY"
// supabaseClient.js

import { createClient } from '@supabase/supabase-js'   
import {PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY} from '$env/static/public'

export const supabase = createClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY)
Run Code Online (Sandbox Code Playgroud)

这应该可行,但请注意您的秘密正在公开访问的 JS 文件中公开(因此有PUBLIC_前缀)。因此,最好只从 SvelteKit 端点访问 supabase(该教程没有这样做)。为此,您应该使用不带前缀的$env/static/privatestore 和 env 变量。(您还必须重构您的 supabase 代码以使其位于 Svelte 端点中,而不是 Svelte 页面/组件中。)PUBLIC_

警告: SvelteKit API 不断变化,最终的 v1.0 方法可能会完全不同。最新的 SvelteKit 已经引入了重大的突破性变化:


我以前使用过旧的VITE_SUPABASE_URL+import.meta.env.VITE_SUPABASE_URL方法,所以它应该可以工作。我不确定 SvelteKit 是否禁用了此方法,因为他们引入了新的环境变量存储。

更新:如果您想继续使用旧import.meta.env.VITE_SUPABASE_URL方法,可以通过envPrefixvite.config.js中进行设置(来源: https: //kit.svelte.dev/docs/configuration#env