SvelteKit执行npm run build时报@firebase/database-compat入口条件错误
解决方案
这个报错是SvelteKit构建时vite对firebase包的导出条件匹配失败导致的,你可以按以下步骤排查修复:
- 修正firebase-admin的导入位置
firebase-admin是服务端专属SDK,绝对不能在客户端代码(会下发到浏览器运行的+page.svelte、+layout.svelte等文件)中导入,只能在服务端专属文件(后缀为.server.js/.server.ts的文件、+server.js/ts接口文件、src/lib/server目录下的文件)中使用。先检查所有导入firebase-admin的代码,确认没有误写到客户端侧。 - 修改svelte.config.js配置
在配置文件中添加vite的ssr外部化排除规则,让vite在服务端构建时统一处理firebase相关包的依赖:
import adapter from '@sveltejs/adapter-vercel'; import preprocess from 'svelte-preprocess'; /** @type {import('@sveltejs/kit').Config} */ const config = { preprocess: preprocess(), kit: { adapter: adapter(), vite: { ssr: { noExternal: ['firebase', '@firebase/*', 'firebase-admin'] }, resolve: { // 手动添加firebase需要的导出匹配条件 conditions: ['node', 'import', 'module'] } } } }; export default config;
- 优化firebase导入逻辑
避免导入完整的firebase compat包,改用按需导入你实际用到的firebase服务,比如只需要认证和云Firestore的话就不要引入realtime database相关的模块,避免触发./standalone入口的加载逻辑:
// 正确示例:按需导入 import { initializeApp } from 'firebase/app'; import { getAuth } from 'firebase/auth'; import { getFirestore } from 'firebase/firestore';
- 重建依赖缓存
如果以上修改后还是报错,删除项目根目录的node_modules文件夹、package-lock.json文件后重新执行npm install,再运行npm run build测试。
开头的
firebase-admin未导出package.json属于警告信息,不影响实际构建流程,无需单独处理。
内容的提问来源于stack exchange,提问作者Vincent Duong
相关产品推荐
相关产品推荐

