Firebase is back at Google I/O on May 10! Register now

升級到 Node.js SDK Admin SDK v10(模塊化 SDK)

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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 或更高版本。如果您將 Admin 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');

節點.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.UserRecordadmin.database.Reference 。由於每種類型都屬於一個模塊,因此您可以通過它們的短名稱(如UserRecordReference導入它們。

以下是自 v10 起在 SDK 中可用的所有模塊入口點:

  • firebase-admin/應用程序
  • firebase-admin/auth
  • firebase-admin/數據庫
  • firebase-admin/firestore
  • firebase-admin/實例-id
  • firebase-admin/機器學習
  • firebase-admin/消息
  • firebase-admin/項目管理
  • firebase-admin/遠程配置
  • firebase-admin/安全規則
  • firebase-admin/存儲

下表顯示了每個舊命名空間函數的替換導入語法:

v9 v10
admin.initializeApp() import { initializeApp } from 'firebase-admin/app'

initializeApp();

admin.app() import { getApp } from 'firebase-admin/ap'

getApp();

admin.credential.cert() import { cert } from 'firebase-admin/app'

cert();

admin.auth() import { getAuth } from 'firebase-admin/auth'

getAuth();

admin.database() import { getDatabase } from 'firebase-admin/database'

getDatabase();

admin.firestore() import { getFirestore } from 'firebase-admin/firestore'

getFirestore();

admin.instanceId() import { getInstanceId } from 'firebase-admin/instance-id'

getInstanceId();

admin.machineLearning() import { getMachineLearning } from 'firebase-admin/machine-learning'

getMachineLearning();

admin.messaging() import { getMessaging } from 'firebase-admin/messaging'

getMessaging()

admin.projectManagement() import { getProjectManagement } from 'firebase-admin/project-management'

getProjectManagement();

admin.remoteConfig() import { getRemoteConfig } from 'firebase-admin/remote-config'

getRemoteConfig();

admin.securityRules() import { getSecurityRules } from 'firebase-admin/security-rules'

getSecurityRules()

admin.storage() import { getStorage } from 'firebase-admin/storage'

getStorage();

在 App 上使用導出的函數而不是方法

在遺留 API 中, App對象公開了許多方法,例如app.auth()app.database() 。我們建議開發人員避免使用這些方法,而是使用上述相同的模塊入口點來獲取作用域為給定App對象的服務實例,並執行其他特定於應用程序的任務。

v9 v10
app.auth() import { getAuth } from 'firebase-admin/auth';

getAuth(app);

app.database() import { getDatabase } from 'firebase-admin/database';

getDatabase(app);

app.database(url) import { getDatabaseWithUrl } from 'firebase-admin/database';

getDatabaseWithUrl(url, app);

app.firestore() import { getFirestore } from 'firebase-admin/firestore'

getFirestore(app);

app.instanceId() import { getInstanceId } from 'firebase-admin/instance-id'

getInstanceId(app);

app.machineLearning() import { getMachineLearning } from 'firebase-admin/machine-learning'

getMachineLearning(app);

app.messaging() import { getMessaging } from 'firebase-admin/messaging'

getMessaging(app);

app.projectManagement() import { getProjectManagement } from 'firebase-admin/project-management'

getProjectManagement(app);

app.remoteConfig() import { getRemoteConfig } from 'firebase-admin/remote-config'

getRemoteConfig(app);

app.securityRules() import { getSecurityRules } from 'firebase-admin/security-rules'

getSecurityRules(app);

app.storage() import { getStorage } from 'firebase-admin/storage'

getStorage(app);

app.delete() import { deleteApp } from 'firebase-admin/app';

deleteApp(app);

ES模塊支持

Node.js 12 及更高版本提供了對 ES 模塊的實驗性支持,即使是非 TypeScript 開發人員也可以在他們的代碼中使用exportimport關鍵字。從 v10 版本開始,Admin Node.js SDK 也提供了 ES modules 支持,這樣在普通 Node.js 上實現 ES modules 的開發者可以使用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');