透過 100+ 個秘訣學習 Nuxt!
部署

Firebase

將您的 Nuxt 應用程式部署到 Firebase 基礎架構。

Firebase Functions

若要使用最新且推薦的 Firebase Functions 世代,請將 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 Hosting。

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

選項

您可以在 nuxt.config.ts 檔案中設定 firebase functions 的選項

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 會自動將設定的 Node.js 版本寫入 .output/server/package.json

您可能還需要在您的 firebase.json 檔案中新增一個 runtime 鍵

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 Hosting 與 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 文件