如何在Firebase环境部署带+server.js路由的SvelteKit应用?
SvelteKit 与 Firebase 部署的路由冲突解决方案
问题核心
- Firebase 要求后端函数放在
functions目录,而 SvelteKit 的 API 路由需写在routes下的+server.js文件,目录规则不兼容导致部署卡壳。 - 不确定是否要使用
@sveltejs/adapter-node适配器,以及是否必须搭建 Express 服务器才能让 Firebase 识别 SvelteKit 的 API 路由。 - 发现多数开发者用静态适配器部署,但自己需要 SSR/API 能力,找到一个实现该功能的开源项目却搞不懂部署流程。
可行解决方案
方案1:静态适配器拆分 API 到 Firebase Functions
如果项目以静态内容为主,仅少量 API 需求,可拆分处理:
- SvelteKit 用
@sveltejs/adapter-static构建静态页面,部署到 Firebase Hosting。 - 把
+server.js里的 API 逻辑迁移到functions目录,用 Node.js 编写成 Firebase Functions。 - 在
firebase.json里配置重写规则,把 API 请求转发到 Functions:{ "hosting": { "public": "build", "rewrites": [ { "source": "/api/**", "function": "api" }, { "source": "**", "destination": "/index.html" } ] } }
方案2:Adapter-Node + Firebase Functions 托管全栈项目
如果需要完整的 SvelteKit SSR/API 能力,用@sveltejs/adapter-node完全可行,无需额外搭建 Express 服务器,步骤如下:
- 配置 SvelteKit 使用 Adapter-Node:
- 安装依赖:
npm install @sveltejs/adapter-node --save-dev - 修改
svelte.config.js:import adapter from '@sveltejs/adapter-node'; export default { kit: { adapter: adapter({ out: 'build' }) } };
- 安装依赖:
- 构建项目:
npm run build,生成build目录。 - 在
functions目录创建承载 SvelteKit 的函数:- 安装依赖:
npm install firebase-functions express --save - 编写
functions/index.js:const functions = require('firebase-functions'); const express = require('express'); const app = express(); // 引入 SvelteKit 构建的服务器入口 const svelteKit = require('../build/index.js'); app.use(svelteKit.handler); exports.sveltekit = functions.https.onRequest(app);
- 安装依赖:
- 配置 Firebase Hosting 把所有请求重写到这个函数:
{ "hosting": { "public": "build", "rewrites": [ { "source": "**", "function": "sveltekit" } ] } } - 部署:
firebase deploy --only hosting,functions
关于开源项目的部署逻辑
你找到的那个 SSR 项目核心逻辑和方案2一致:用 Adapter-Node 构建 SvelteKit 产物,再把产物挂载到 Firebase Functions,通过 Hosting 重写所有请求到函数,只是额外加了缓存、环境变量配置之类的优化。
内容的提问来源于stack exchange,提问作者Zied Hamdi
相关产品推荐
相关产品推荐

