Firebase Deploy Nitro apps to Firebase.

将 Nitro 应用部署到 Firebase。

Preset: firebase

相关阅读:Firebase Hosting

您需要加入Blaze 计划才能使用具有云功能的 Nitro。

此预设将默认部署到 Firebase Functions 第 1 代。如果您想要部署到 Firebase Functions 第 2 代,请参阅下面的说明

Project Setup

使用 firebase CLI(推荐)

您可能更喜欢使用 Firebase CLI 设置您的项目,它将为您获取项目 ID、添加所需的依赖项(见上文),甚至通过 GitHub Actions 设置自动部署(仅用于托管)。了解如何安装 firebase CLI

1. 全局安装 firebase CLI

始终尝试使用最新版本的 Firebase CLI。

bash
npm install -g firebase-tools@latest

注意:你需要在 ^11.18.0 上部署 nodejs18 函数。

2. 初始化你的 Firebase 项目

bash
firebase login
firebase init hosting

出现提示时,您可以输入 .output/public 作为公共目录。在下一步中,不要将您的项目配置为单页应用。

完成后,将以下内容添加到您的 firebase.json 以在 Cloud Functions 中启用服务器渲染:

firebase.json
json
{
  "functions": { "source": ".output/server" },
  "hosting": [
    {
      "site": "<your_project_id>",
      "public": ".output/public",
      "cleanUrls": true,
      "rewrites": [{ "source": "**", "function": "server" }]
    }
  ]
}

您可以在 Firebase 文档 中找到更多详细信息。

替代方法

如果您的根目录中还没有 firebase.json,Nitro 会在您第一次运行时创建一个。在此文件中,您需要将 <your_project_id> 替换为您的 Firebase 项目的 ID。然后应将此文件提交到 git。

1. 创建 .firebaserc 文件

建议创建一个 .firebaserc 文件,这样您就无需手动将项目 ID 传递给 firebase 命令(使用 --project <your_project_id>):

.firebaserc
json
{
  "projects": {
    "default": "<your_project_id>"
  }
}

此文件通常是在您使用 Firebase CLI 初始化项目时生成的。但是如果您没有,您可以手动创建它。

2. 安装 firebase 依赖项

然后,将 Firebase 依赖项添加到您的项目中:

3. 登录 firebase CLI

确保您已通过 firebase cli 进行身份验证。运行此命令并按照提示操作:

本地预览

如果您需要在不部署的情况下进行测试,您可以预览站点的本地版本。

bash
NITRO_PRESET=firebase npm run build
firebase emulators:start

构建和部署

通过运行 Nitro 构建然后运行“firebase deploy”命令来部署到 Firebase Hosting。

bash
NITRO_PRESET=firebase npm run build

如果您全局安装了 Firebase CLI,您还可以运行:

bash
firebase deploy

使用第二代 firebase 函数

要切换到较新且推荐的 firebase 函数,请将 firebase.gen 选项设置为 2

ts
nitro.config.ts
ts
export default defineNitroConfig({
  firebase: {
    gen: 2
    // ...
  }
})

如果您因任何原因无法使用配置,也可以使用 NITRO_FIREBASE_GEN 环境变量。

如果您已经部署了网站版本并希望升级到第二代,请参阅 Firebase 文档中的迁移过程。也就是说,CLI 会要求您在部署新函数之前删除现有函数。

选项

您可以在 nitro.config.ts 文件中为 firebase 函数设置选项:

ts
nitro.config.ts
ts
export default defineNitroConfig({
  firebase: {
    gen: 2,
    httpsOptions: {
      region: 'europe-west1',
      maxInstances: 3,
    },
  },
})

如果gen选项设置为1,您还可以设置第一代云函数的选项。请注意,这些选项与第二代云函数的选项不同。

运行时 Node.js 版本

您可以在配置中设置自定义 Node.js 版本:

ts
nitro.config.ts
ts
export default defineNitroConfig({
  firebase: {
    nodeVersion: '18' // Can be "16" or "18" or "20"
  },
})

Firebase 工具使用 package.json 中的 engines.node 版本来确定要为您的函数使用哪个节点版本。Nitro 会自动将配置的 Node.js 版本写入 .output/server/package.json

您可能还需要在 firebase.json 文件中添加一个运行时密钥:

firebase.json
json
{
  "functions": {
    "source": ".output/server",
    "runtime": "nodejs18"
  }
}

您可以在 Firebase 文档 中阅读更多相关信息。

如果您的 firebase 项目有其他云函数

您可能会收到警告,在部署 nitro 项目时,其他云函数将被删除。这是因为 nitro 会将您的整个项目部署到 firebase 函数。如果您只想部署 nitro 项目,可以使用 --only 标志:

bash
firebase deploy --only functions:server,hosting

高级

重命名函数

在同一个 Firebase 项目中部署多个应用时,您必须为服务器指定一个唯一的名称,以避免覆盖 您的函数。

您可以在配置中为已部署的 Firebase 函数指定一个新名称:

ts
nitro.config.ts
ts
export default defineNitroConfig({
  firebase: {
    serverFunctionName: '<new_function_name>'
  }
})