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

如何配置SvelteKit使用Firebase Auth并解决Firebase9的getFirestore导出错误

问题解决步骤

报错原因

该报错由两个核心问题导致:

  • Firebase 9的模块化客户端API不支持在SvelteKit默认的服务端渲染(SSR)环境中运行,服务端执行代码时无法正确解析Firebase的导出
  • Vite预构建缓存了旧版本的Firebase依赖结构,导致导出匹配失败

具体解决操作

1. 清理缓存并重装依赖

先删除本地缓存文件和依赖,重新安装确保依赖版本正确:

rm -rf node_modules package-lock.json .vite
npm install

2. 调整Firebase初始化逻辑,仅客户端侧初始化

修改firebaseConfig.js,加入客户端环境判断,避免服务端执行初始化逻辑:

import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/auth';
import { getFirestore } from 'firebase/firestore';
import { browser } from '$app/environment';

const firebaseConfig = {
    apiKey: 'AIzaSyCAAngD7340_noXs7eesCfE9Y3cwqmiZhU',
    authDomain: 'svelte-todo-20f21.firebaseapp.com',
    projectId: 'svelte-todo-20f21',
    storageBucket: 'svelte-todo-20f21.appspot.com',
    messagingSenderId: '402466412167',
    appId: '1:402466412167:web:c739e7eb86fc5b6ac5ca22',
    measurementId: 'G-2N348J0NTE'
};

let firebaseApp, auth, firestore;

// 仅在浏览器客户端初始化Firebase
if (browser) {
    firebaseApp = initializeApp(firebaseConfig);
    auth = getAuth(firebaseApp);
    firestore = getFirestore(firebaseApp);
}

export { auth, firestore };
export default firebaseApp;

3. 修正svelte.config.js的Vite配置

将原来的external配置改为noExternal,同时添加预构建依赖配置:

/** @type {import('@sveltejs/kit').Config} */
const config = {
    kit: {
        target: '#svelte',
        vite: {
            optimizeDeps: {
                include: ['firebase/app', 'firebase/auth', 'firebase/firestore']
            },
            ssr: {
                noExternal: ['firebase']
            }
        }
    }
};

export default config;

4. 可选:关闭当前页面SSR(优先推荐)

如果该页面不需要服务端渲染,直接在index.svelte中添加关闭SSR的配置,从根源避免服务端执行代码的问题:

<script context="module">
    export const ssr = false;
</script>

<script>
    import { googleSignIn } from '../auth';
</script>

<button on:click={() => googleSignIn()}>Sign In</button>

5. 给登录逻辑加兜底判断

修改auth.js,避免服务端调用时出现未定义错误:

import { auth } from './firebaseConfig';
import { GoogleAuthProvider, signInWithPopup } from 'firebase/auth';

const googleProvider = new GoogleAuthProvider();

export const googleSignIn = async () => {
    // 服务端未初始化auth,直接跳过执行
    if (!auth) return;
    try {
        const user = await signInWithPopup(auth, googleProvider);
        console.log(user);
    } catch (error) {
        console.error(error);
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:12:01