部署目標

「部署目標」是 Firebase 專案中 Firebase 資源的簡稱 ID (由您自行定義),例如具有獨特靜態資產的託管網站,或是共用相同安全性規則的一組即時資料庫執行個體。

當您在有多個託管網站、多個 Cloud Storage 值區或多個即時資料庫執行個體時,部署目標會很實用。有了部署目標,Firebase CLI 就能將設定部署至特定的 Firebase 資源或專案中的資源群組,例如:

  • 每個託管網站的代管設定
  • 專案目錄中每個託管網站的靜態資產
  • 多個即時資料庫執行個體或多個 Cloud Storage 值區共用的安全性規則

如要設定部署目標:

  1. TARGET_NAME 套用至指定的 Firebase 資源或 Firebase 資源群組。
  2. 調整每個資源或資源群組的設定時,請在 firebase.json 檔案中參照相關聯的 TARGET_NAME

執行 Firebase CLI 指令 (例如 firebase deploy) 時,Firebase CLI 會將每個 TARGET_NAME 與相關聯的 Firebase 資源配對。接著,CLI 會將每項資源的設定 與 Firebase 專案通訊

為 Firebase 資源設定部署目標

使用 Firebase CLI,將 TARGET_NAME (您自行定義的簡稱 ID) 套用至 Firebase 資源或 Firebase 資源群組。Firebase 支援下列產品的部署目標:

部署目標的設定會儲存在專案目錄中的 .firebaserc 檔案中,因此您只需要為每項專案設定部署目標一次。

設定託管的部署目標

如要建立部署目標並將 TARGET_NAME 套用至託管網站,請執行下列 CLI 指令:

firebase target:apply TYPE TARGET_NAME RESOURCE_IDENTIFIER

其中的參數如下:

  • TYPE:相關的 Firebase 資源類型

    • 如果是 Firebase 託管網站,請使用 hosting
  • TARGET_NAME:您要部署的託管網站專屬名稱

  • RESOURCE_IDENTIFIER:用於託管網站的 SITE_ID列在 Firebase 專案中

舉例來說,如果您在 Firebase 專案中建立了兩個網站 (myapp-blogmyapp-app),可以執行下列指令,為每個網站套用不重複的 TARGET_NAME (分別為 blogapp):

firebase target:apply hosting blog myapp-blog
firebase target:apply hosting app myapp-app

設定 Cloud Storage 或即時資料庫的部署目標

如要建立部署目標,並將 TARGET_NAME 套用至一組 Cloud Storage 或即時資料庫資源,請執行下列 CLI 指令:

firebase target:apply TYPE TARGET_NAME RESOURCE-1_IDENTIFIER RESOURCE-2_IDENTIFIER ...

其中的參數如下:

  • TYPE:相關的 Firebase 資源類型

    • 如果是 Cloud Storage 值區,請使用 storage
    • 如果是即時資料庫執行個體,請使用 database
  • TARGET_NAME:共用安全性規則的資源或資源群組的專屬名稱

  • RESOURCE_IDENTIFIER列在您的 Firebase 專案中的資源 ID,例如儲存空間值區名稱或資料庫執行個體 ID,全都共用相同的安全性規則。

例如,您可以執行下列指令,將 mainTARGET_NAME 套用至三個區域 Cloud Storage 值區的一組 (這些值區共用相同的安全性規則):

firebase target:apply storage main myproject.appspot.com myproject-eu myproject-ja

請注意,myproject.appspot.com 是預設值區的 ID,而 myproject-eumyproject-ja 則是 Firebase 專案中建立的其他兩個值區。

設定 firebase.json 檔案以使用部署目標

為 Firebase 資源設定部署目標後,請在 firebase.json 設定檔中參照每個套用的 TARGET_NAME

  1. 為每個 Firebase 資源 TYPE (hostingstoragedatabase) 建立設定物件陣列。
  2. 在陣列中指定 target (使用 TARGET_NAME),並定義相關聯的 Firebase 資源或資源群組設定。

延續上述範例,您的 Firebase 專案有兩個託管網站,以及三個共用相同安全性規則的 Cloud Storage 值區,您的 firebase.json 檔案將如下所示:

{
  "hosting": [ {
      "target": "blog",  // "blog" is the applied TARGET_NAME for the Hosting site "myapp-blog"
      "public": "blog/dist",  // contents of this folder are deployed to the site "myapp-blog"

      // ...
    },
    {
      "target": "app",  // "app" is the applied TARGET_NAME for the Hosting site "myapp-app"
      "public": "app/dist",  // contents of this folder are deployed to the site "myapp-app"

      // ...

      "rewrites": [...]  // You can define specific Hosting configurations for each site
    }
  ]
}

{
  "storage": [ {
      "target": "main",  // "main" is the applied TARGET_NAME for the group of Cloud Storage buckets
      "rules": "storage.main.rules"  // the file that contains the shared security rules
    }
  ]
}

如果資源有多項設定,您可以建立多個部署目標,並在 firebase.json 檔案中指定每個目標。執行 firebase deploy 時,系統會一起部署所有相關資源。

管理部署目標

部署目標的設定會儲存在專案目錄中的 .firebaserc 檔案中。您可以在專案目錄的根目錄中執行下列任一指令,以管理專案的部署目標。

指令 說明
firebase target 列出目前專案目錄的部署目標
firebase target:remove \
TYPE RESOURCE_IDENTIFIER
從指派的目標中移除資源
firebase target:clear \
TYPE TARGET_NAME
從指定的目標中移除所有資源或託管網站

target:removetarget:clear 指令會自動更新專案目錄中 .firebaserc 檔案的部署目標設定。

先在本機測試再部署

從專案目錄的根目錄執行下列任一指令。

指令 說明
firebase emulators:start 在專案目錄中模擬「所有」已設定的資源
firebase emulators:start \
--only hosting:TARGET_NAME
僅模擬指定「託管」網站的代管內容與設定
firebase emulators:start \
--only storage:TARGET_NAME
僅模擬指定 Cloud Storage 目標的規則檔案
firebase emulators:start \
--only database:TARGET_NAME
僅模擬指定即時資料庫目標的規則檔案

進一步瞭解如何設定及使用 Firebase 本機模擬器套件

部署特定 Firebase 資源

從專案目錄的根目錄執行下列任一指令。

指令 說明
firebase deploy 在專案目錄中建立「所有」可部署資源的版本
firebase deploy \
--only hosting:TARGET_NAME
僅將指定「託管」網站的「託管」內容和設定部署至網站的直播頻道
firebase hosting:channel:deploy CHANNEL_ID \
--only TARGET_NAME
僅將指定「託管」網站的代管內容和設定部署至網站的預覽版本
firebase deploy \
--only storage:TARGET_NAME
僅部署指定 Cloud Storage 目標的規則檔案
firebase deploy \
--only database:TARGET_NAME
僅部署指定即時資料庫目標的規則檔案