Admin Node.js SDK 版本 10 引入了兩項重要變更:
- 對 Node.js 10 的支援已停止(這是一項重大更改)
- SDK採用模組化API模式
本指南提供了說明和訊息,可協助開發人員將現有 Node.js 應用程式從早期版本的 Admin SDK 升級到 v10。
將 Node.js 更新到 v12 或更高版本
隨著 Admin Node.js SDK v10 版本的發布,Firebase 已停止對 Node.js 10 的支援。開發人員在使用 Admin SDK 時必須使用 Node.js 12 或更高版本。如果您將管理 Node.js SDK 與 Cloud Functions for Firebase 一起使用,請確保您已將Node.js 版本升級至 12 或更高版本。
使用模組而不是命名空間
自推出以來,Admin Node.js SDK 提供了一個穩定的 API,其結構為巢狀命名空間層次結構。因此,您可能已經熟悉編寫如下所示的程式碼:
// Import the global admin namespace
import * as admin from 'firebase-admin';
const app: admin.app.App = admin.initializeApp();
const token: string = await admin.auth().createCustomToken('alice');
const user: admin.auth.UserRecord = await admin.auth().getUser('bob');
從 v10 開始,Admin Node.js SDK 提供了多個帶有命名導出的模組入口點。我們建議開發人員使用這些新入口點來存取 SDK 的各種 API,而不是使用全域admin
命名空間。
以下是使用新模組入口點的上述範例的外觀:
打字稿
// Import only what you need
import { initializeApp, App } from 'firebase-admin/app';
import { getAuth, UserRecord } from 'firebase-admin/auth';
const app: App = initializeApp();
const token: string = await getAuth().createCustomToken('alice');
const user: UserRecord = getAuth().getUser('bob');
Node.js
// Import only what you need
const { initializeApp } = require('firebase-admin/app');
const { getAuth } = require('firebase-admin/auth');
const app = initializeApp();
const token = await getAuth().createCustomToken('alice');
const user = getAuth().getUser('bob');
使用 v10 模組化入口點
請注意,在上面的範例中,您不再匯入全域admin
命名空間。相反,您可以從多個模組入口點僅明確匯入所需的符號。此外,TypeScript 開發人員不再需要使用三重巢狀類型標識符,例如admin.auth.UserRecord
和admin.database.Reference
。由於每種類型都屬於一個模組,因此您可以透過它們的短名稱(例如UserRecord
和Reference
匯入它們。
以下是自 v10 起 SDK 中可用的所有模組入口點:
- firebase-管理/應用程式
- firebase-管理/身份驗證
- firebase-管理/資料庫
- firebase-管理/firestore
- firebase-管理員/實例 ID
- firebase-管理/機器學習
- firebase-管理/訊息傳遞
- firebase 管理/專案管理
- firebase 管理/遠端配置
- firebase 管理/安全規則
- firebase-管理/存儲
下表顯示了每個舊命名空間函數的替換導入語法:
v9 | v10 |
---|---|
admin.initializeApp() | import { initializeApp } from 'firebase-admin/app' |
admin.app() | import { getApp } from 'firebase-admin/ap' |
admin.credential.cert() | import { cert } from 'firebase-admin/app' |
admin.auth() | import { getAuth } from 'firebase-admin/auth' |
admin.database() | import { getDatabase } from 'firebase-admin/database' |
admin.firestore() | import { getFirestore } from 'firebase-admin/firestore' |
admin.instanceId() | import { getInstanceId } from 'firebase-admin/instance-id' |
admin.machineLearning() | import { getMachineLearning } from 'firebase-admin/machine-learning' |
admin.messaging() | import { getMessaging } from 'firebase-admin/messaging' |
admin.projectManagement() | import { getProjectManagement } from 'firebase-admin/project-management' |
admin.remoteConfig() | import { getRemoteConfig } from 'firebase-admin/remote-config' |
admin.securityRules() | import { getSecurityRules } from 'firebase-admin/security-rules' |
admin.storage() | import { getStorage } from 'firebase-admin/storage' |
在 App 上使用導出函數代替方法
在舊版 API 中, App
物件公開了許多方法,例如app.auth()
和app.database()
。我們建議開發人員避免使用這些方法,而是使用上述相同的模組入口點來取得給定App
範圍內的服務實例,並執行其他特定於應用程式的任務。
v9 | v10 |
---|---|
app.auth() | import { getAuth } from 'firebase-admin/auth'; |
app.database() | import { getDatabase } from 'firebase-admin/database'; |
app.database(url) | import { getDatabaseWithUrl } from 'firebase-admin/database'; |
app.firestore() | import { getFirestore } from 'firebase-admin/firestore' |
app.instanceId() | import { getInstanceId } from 'firebase-admin/instance-id' |
app.machineLearning() | import { getMachineLearning } from 'firebase-admin/machine-learning' |
app.messaging() | import { getMessaging } from 'firebase-admin/messaging' |
app.projectManagement() | import { getProjectManagement } from 'firebase-admin/project-management' |
app.remoteConfig() | import { getRemoteConfig } from 'firebase-admin/remote-config' |
app.securityRules() | import { getSecurityRules } from 'firebase-admin/security-rules' |
app.storage() | import { getStorage } from 'firebase-admin/storage' |
app.delete() | import { deleteApp } from 'firebase-admin/app'; |
ES 模組支援
Node.js 12 及更高版本提供了對 ES 模組的實驗性支持,甚至使非 TypeScript 開發人員也可以在其程式碼中使用export
和import
關鍵字。從 v10 版本開始,Admin Node.js SDK 還提供了 ES 模組支持,以便在普通 Node.js 上實現 ES 模組的開發人員可以使用import
語法導入 SDK。
若要將 ES 模組與 Admin SDK 結合使用,首先請確保您已為 Node.js 執行時期啟用 ESM 支援。這通常是透過在package.json
檔案中加入"type": "module"
欄位來完成的。然後您可以編寫如下所示的應用程式程式碼:
// With {type: module} in the package.json...
// Import only what you need
import { initializeApp } from 'firebase-admin/app';
import { getAuth } from 'firebase-admin/auth';
const app = initializeApp();
const token = await getAuth().createCustomToken('alice');
const user = getAuth().getUser('bob');