您可以在 App Hosting 部署前,使用 App Hosting 模擬器對應用程式進行本機測試。App Hosting 模擬器是 Firebase 本機模擬器套件的一部分。
使用 App Hosting 模擬器前,請務必瞭解整體 Firebase Local Emulator Suite 工作流程,並安裝及設定 Local Emulator Suite,並查看其 CLI 指令。
本主題假設您已熟悉 App Hosting。如有需要,請參閱 App Hosting 簡介和其他相關資料,瞭解 App Hosting 的運作方式。
App Hosting 模擬器有什麼用途?
App Hosting 模擬器可讓您在本機測試及調整網頁應用程式。這麼做可以簡化開發程序,並提升使用 Firebase 建構並部署在 App Hosting 上的 Web 應用程式品質。
App Hosting 模擬器:
- 讓您在本機執行網頁應用程式,並使用
apphosting.yaml
設定檔中定義的環境變數。 - 可匯出您在不同 App Hosting 環境中儲存的機密資料,讓您在不同環境中模擬應用程式。
- 可與其他 Firebase 模擬器搭配使用。如果您使用的是 Firestore、Auth 或任何其他模擬器,Local Emulator Suite 會確保先啟動這些模擬器,再啟動 App Hosting 模擬器。
設定模擬器
如要開始使用,請按照「安裝、設定及整合本機模擬器套件」一文的說明,安裝及初始化 Local Emulator Suite。除了要設定的其他 Firebase 模擬器之外,請務必選取 App Hosting
Emulator
。CLI 會提示您輸入部分 App Hosting 模擬器值,包括:
- 相對於專案的應用程式根目錄。如果您使用單一存放區與 App Hosting,這項資訊就很重要。
- 您是否要匯出特定環境的密鑰。
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
◯ Firestore Emulator
◯ Database Emulator
◯ Hosting Emulator
◯ Pub/Sub Emulator
◯ Storage Emulator
◯ Eventarc Emulator
(Move up and down to reveal more choices)
? Specify your app's root directory relative to your project (.)
? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ Secrets
? Which environment would you like to export secrets from Secret Manager for?:
◯ base (apphosting.yaml)
❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.
您在這項設定流程中提供的任何值,都會用於更新 firebase.json
中的 App Hosting 模擬器設定。您也可以直接更新 firebase.json
,藉此設定應用程式代管模擬器。App Hosting 模擬器的結構定義如下:
{
...
"emulators": {
"apphosting": {
"startCommandOverride": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- 在初始化模擬器時,系統會自動產生並設定
startCommandOverride
。如果未提供,模擬器會偵測並執行套件管理員的開發人員指令。 rootDirectory
可用於支援單一版本控制倉庫專案設定。如果您的網路應用程式位於子目錄中,您需要提供該目錄相對於根目錄 (firebase.json
的位置) 的路徑。
管理模擬功能
模擬器初始化會在應用程式的根目錄中建立 apphosting.local.yaml
檔案。這個設定檔的架構與實際工作環境中使用的 apphosting.yaml
檔案相同,但僅限於本地開發使用。根據預設,模擬器會從 apphosting.yaml
檔案讀取設定,但如果有 apphosting.local.yaml
檔案,則會優先處理該檔案中的設定。
匯出密鑰,在本機模擬不同環境
如果您使用多個環境,且想在本機模擬不同的應用程式環境,可能需要對應環境的機密資料。您可以使用 CLI 指令 apphosting:config:export
匯出特定環境的機密資料 (或者,如設定模擬器所示,您也可以選擇在模擬器初始化期間匯入機密資料)。
您必須從專案的 App Hosting 可用環境中選取,才能執行這個指令。系統會合併特定環境的 App Hosting 設定 (例如「apphosting.staging.yaml」) 和基礎 App Hosting 設定 (「apphosting.yaml」),並以特定環境設定為優先。如果兩個設定中都存在同名的密鑰,系統會使用環境專屬設定中的密鑰。
舉例來說,如要從測試環境將機密資料匯出至模擬器:
firebase apphosting:config:export --project <your firebase project Id>
? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ Secrets
? Which environment would you like to export secrets from Secret Manager for?:
◯ base (apphosting.yaml)
❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.
系統會將匯出的密鑰設為環境變數,更新 (或建立) apphosting.local.yaml
檔案。由於檔案現在含有以純文字形式呈現的私密資訊,因此系統會自動將檔案新增至 .gitignore
檔案,以免誤將檔案提交至原始碼存放區。
執行模擬器
firebase emulators:start
這會啟動 firebase.json
檔案中定義的所有模擬器,包括 App Hosting 模擬器。