Providers

Firebase

将 Nitro 应用部署到 Firebase。

预设: firebase

Read more in Firebase Hosting.
您需要在 Blaze 计划 中才能使用 Nitro 和云函数。
此预设默认将部署到 Firebase 函数的第一代。如果您想部署到 Firebase 函数的第二代,请查阅 以下说明

项目设置

使用 firebase CLI(推荐)

您也可以选择通过 Firebase CLI 设置项目,它会为您获取项目 ID,添加所需的依赖项(见上文),甚至通过 GitHub Actions 设置自动部署(仅限托管)。 了解如何安装 Firebase CLI

1. 全局安装 firebase CLI

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

npm install -g firebase-tools@latest

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

2. 初始化您的 Firebase 项目

firebase login
firebase init hosting

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

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

firebase.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
{
  "projects": {
    "default": "<your_project_id>"
  }
}

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

2. 安装 Firebase 依赖项

接下来,将 Firebase 依赖项添加到您的项目中:

npm i firebase-admin firebase-functions firebase-functions-test

3. 登录 Firebase CLI

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

npx firebase-tools login

本地预览

如果您需要测试而不进行部署,可以预览本地版本的网站。

NITRO_PRESET=firebase npm run build
firebase emulators:start

构建和部署

通过运行 Nitro 构建然后运行 firebase deploy 命令,将应用部署到 Firebase Hosting。

NITRO_PRESET=firebase npm run build
npx firebase-tools deploy

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

firebase deploy

使用第二代 Firebase 函数

要切换到更现代和推荐的 Firebase 函数的版本,请将 firebase.gen 选项设置为 2

export default defineNitroConfig({
  firebase: {
    gen: 2
    // ...
  }
})
如果出于某种原因您无法使用配置,您可以改用 NITRO_FIREBASE_GEN 环境变量。

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

选项

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

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

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

运行时 Node.js 版本

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

export default defineNitroConfig({
  firebase: {
    nodeVersion: "18" // 可以是 "16"、"18"、"20" 或 "22"
  },
});

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

您可能还需要在 firebase.json 文件中添加运行时键:

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

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

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

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

firebase deploy --only functions:server,hosting

高级

重命名函数

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

您可以在配置中指定要部署的 Firebase 函数的新名称:

export default defineNitroConfig({
  firebase: {
    serverFunctionName: "<new_function_name>"
  }
})