您可以使用 App Hosting 模擬器 (Firebase 本機模擬器套件的一部分),在App Hosting部署應用程式前進行本機測試。
使用 App Hosting 模擬器前,請務必瞭解 Firebase Local Emulator Suite 整體工作流程,並安裝及設定 Local Emulator Suite,然後查看其 CLI 指令。
本主題假設您已熟悉 App Hosting。如有需要,請參閱App Hosting簡介和其他資料,協助您瞭解 App Hosting 的運作方式。
App Hosting模擬器有什麼用途?
您可以使用 App Hosting 模擬器在本機測試及調整網頁應用程式。這項功能可簡化開發程序,並提升使用 Firebase 建構及部署在 App Hosting 的網頁應用程式品質。
App Hosting 模擬器:
- 可讓您在本機執行網路應用程式,並使用
apphosting.yaml
設定檔中定義的環境變數和密鑰。 - 可使用
apphosting.emulator.yaml
檔案覆寫環境變數和密鑰,以供模擬器使用。 - 可與其他 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 (./)
? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)
? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
◯ API_KEY
? What new value would you like for plaintext MEMCACHE_ADDR?
? What would you like to name the secret reference for API_KEY? (test-api-key)
? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]
? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:
✔ Successfully set IAM bindings on secret test-api-key.
您在這個設定流程中提供的任何值,都會用於更新 firebase.json
中的 App Hosting 模擬器設定。您也可以直接更新 firebase.json
,設定 App Hosting 模擬器。App Hosting 模擬器的結構定義如下:
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- 模擬器初始化時,系統會自動產生並設定
startCommand
。如果未提供,模擬器會偵測並執行套件管理員的開發指令。 rootDirectory
用於支援單一存放區專案設定。如果網頁應用程式位於子目錄中,請提供該目錄相對於根目錄的路徑 (firebase.json
的位置)。
管理模擬
模擬器初始化會在應用程式的根目錄中建立 apphosting.emulator.yaml
檔案。這個設定檔的結構與用於正式環境的 apphosting.yaml
檔案相同,但僅適用於本機開發。根據預設,模擬器會從 apphosting.yaml
檔案讀取設定,但如果存在 apphosting.emulator.yaml
檔案,則該檔案中的設定會優先處理。
apphosting.emulator.yaml
檔案的設計宗旨是確保安全無虞,可提交並與同事共用。為確保您不會不小心將機密資料提交至來源存放區,apphosting.yaml
中的任何機密環境變數也必須是 apphosting.emulator.yaml
中的機密變數。如果密鑰不需要在正式版和本機開發環境之間變更 (例如 Gemini API 金鑰),則不需要新增至 apphosting.emulator.yaml
;請改為授予團隊密鑰存取權。
如果應用程式使用許多密鑰 (例如三種不同服務的 API 金鑰,且正式版、測試版和本機開發環境的值各不相同),您可能會超出 Cloud Secret Manager 的免費層級,並為每個月的每個額外密鑰支付 $0.06 美元。如要避免這筆費用,並選擇在來源控制項以外管理本機設定,可以使用舊版 apphosting.local.yaml
檔案。與 apphosting.emulator.yaml
不同,這個檔案可為 apphosting.yaml
中的機密環境變數提供純文字值。
授予使用者或群組密鑰存取權
模擬器啟動時,系統會讀取儲存在 apphosting.emulator.yaml
中的密鑰。也就是說,開發團隊需要存取密鑰。您可以使用 apphosting:secrets:grantaccess
指令,透過電子郵件將密鑰存取權授予使用者或群組。
firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com
如適用,請考慮在 apphosting.emulator.yaml
中使用只能用於測試的金鑰,這類金鑰無法存取正式版資料、不會產生全域副作用 (例如傳送電子郵件、向信用卡收費),且/或配額較低。這有助於確保未經審查的程式碼不會造成嚴重後果。
建議使用 Google 群組管理密鑰存取權,而非授予個別使用者存取權。這樣一來,您只要將新成員新增至群組,對方就能存取所需的所有密鑰,簡化開發人員團隊的新成員加入程序。您可能已有適當的群組,供開發人員彼此溝通。透過 Google 網路論壇控管存取權,也有助於確保開發人員離開團隊時,從電子郵件群組中移除後,就無法再存取所有密鑰。如果密鑰可存取實際資料或產生實際副作用,您可能仍應使用 firebase apphosting:secrets:set
輪替金鑰並賦予新值。
執行模擬器
firebase emulators:start
這會啟動 firebase.json
檔案中定義的所有模擬器,包括 App Hosting 模擬器。