Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

升級到 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 管理員/應用程序
  • firebase 管理員/身份驗證
  • firebase-管理員/數據庫
  • firebase-admin/firestore
  • firebase-admin/instance-id
  • firebase 管理員/機器學習
  • firebase 管理員/消息
  • firebase-admin/項目管理
  • firebase 管理員/遠程配置
  • firebase 管理員/安全規則
  • firebase 管理員/存儲

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

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 模塊支持,以便在普通 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');