Nuxt Nation 大会即将到来。加入我们,时间为 11 月 12 日至 13 日。
部署

Firebase

将您的 Nuxt 应用程序部署到 Firebase 基础设施。

Firebase 函数

要使用更新且推荐的 Firebase 函数版本,请将 firebase.gen 选项设置为 2

nuxt.config.ts
export default defineNuxtConfig({
  nitro: {
    firebase: {
      gen: 2
    }
  }
})
如果您由于任何原因无法使用配置,则可以选择使用 NITRO_FIREBASE_GEN=2 环境变量。

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

第一代和第二代函数之间的比较

项目设置

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

  1. 安装最新版本的 Firebase CLI。
    终端
    npm install -g firebase-tools@latest
    
  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" }]
    }
  ]
}

本地预览

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

npm run build -- --preset=firebase
firebase emulators:start

构建和部署

通过运行 Nitro 构建,然后运行 firebase deploy 命令来部署到 Firebase 托管。

npm run build -- --preset=firebase
firebase deploy

选项

您可以在 nuxt.config.ts 文件中设置 Firebase 函数的选项

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

运行时 Node.js 版本

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

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

Firebase 工具使用 package.json 中的 engines.node 版本来确定为您的函数使用哪个 Node 版本。Nuxt 会自动写入 .output/server/package.json,其中包含已配置的 Node.js 版本。

您可能还需要将运行时密钥添加到 firebase.json 文件中

firebase.json
{
  "functions": {
    "source": ".output/server",
    "runtime": "nodejs20"
  }
}
您可以在**Firebase 文档**中了解更多信息。

如果您的 Firebase 项目有其他 Cloud Functions

您可能会收到警告,提示在您部署 Nuxt 项目时会删除其他 Cloud Functions。这是因为 Nitro 会将您的整个项目部署到 Firebase Functions。如果您只想部署 Nuxt 项目,可以使用 --only 标志

firebase deploy --only functions:server,hosting
转到**Nitro 文档**以了解有关 Firebase 部署预设的更多信息。

在生产环境中使用 Cookie

当将 Firebase 托管与 Cloud Functions 或 Cloud Run 结合使用时,通常会从传入请求中剥离 Cookie,以实现高效的 CDN 缓存行为。只有特殊命名的 __session Cookie 允许传递到您的应用程序。

有关更多信息,请参阅**Firebase 文档**。

使用环境变量

要为您的 Firebase 函数设置环境变量,您需要将 .env 文件复制到 .output/server 目录。您可以通过在 package.json 中添加 postbuild 脚本,在构建命令后自动运行来实现此目的

package.json
{
  "scripts": {
    "postbuild": "cp .env .output/server/.env"
  }
}
有关更多信息,请参阅**Firebase 文档**。