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

如何在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 服务器,步骤如下:

  1. 配置 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'
          })
        }
      };
      
  2. 构建项目:npm run build,生成build目录。
  3. 在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);
      
  4. 配置 Firebase Hosting 把所有请求重写到这个函数:
    {
      "hosting": {
        "public": "build",
        "rewrites": [
          {
            "source": "**",
            "function": "sveltekit"
          }
        ]
      }
    }
    
  5. 部署:firebase deploy --only hosting,functions

关于开源项目的部署逻辑

你找到的那个 SSR 项目核心逻辑和方案2一致:用 Adapter-Node 构建 SvelteKit 产物,再把产物挂载到 Firebase Functions,通过 Hosting 重写所有请求到函数,只是额外加了缓存、环境变量配置之类的优化。

内容的提问来源于stack exchange,提问作者Zied Hamdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:03:18