Upgrade auf das Node.js Admin SDK v10 (modulares SDK)

Version 10 des Admin Node.js SDK bringt zwei wichtige Änderungen mit sich:

  • Die Unterstützung für Node.js 10 wird eingestellt (wesentliche Änderung)
  • Das SDK verwendet ein modulares API-Muster.

Dieser Leitfaden enthält Anleitungen und Informationen, die Entwicklern dabei helfen, vorhandene Node.js-Apps von früheren Versionen der Admin SDK auf Version 10 umzustellen.

Aktualisieren Sie Node.js auf Version 12 oder höher.

Mit der Version 10 des Admin Node.js SDK hat Firebase die Unterstützung für Node.js 10 eingestellt. Entwickler müssen Node.js 12 oder höher verwenden, wenn sie die Admin SDK verwenden. Wenn Sie das Admin Node.js SDK zusammen mit Cloud Functions for Firebase verwenden, müssen Sie Ihre Node.js-Version auf Version 12 oder höher aktualisieren.

Module anstelle von Namespaces verwenden

Seit seiner Einführung bietet das Admin Node.js SDK eine stabile API, die als verschachtelte Namespacehierarchie strukturiert ist. Daher sind Sie möglicherweise mit dem Schreiben von Code vertraut, der so aussieht:

// 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');

Ab Version 10 bietet das Admin Node.js SDK mehrere Moduleinstiegspunkte mit benannten Exporten. Wir empfehlen Entwicklern, diese neuen Einstiegspunkte zu verwenden, um auf die verschiedenen APIs des SDKs zuzugreifen, anstatt den globalen admin-Namespace zu verwenden.

So würde das Beispiel oben mit den neuen Modul-Einstiegspunkten aussehen:

TypeScript

// 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');

Modulare Einstiegspunkte der Version 10 verwenden

Beachten Sie, dass in den obigen Beispielen kein globaler admin-Namespace mehr importiert wird. Stattdessen importieren Sie nur die Symbole, die Sie benötigen, aus mehreren Modul-Einstiegspunkten. Außerdem müssen TypeScript-Entwickler keine dreifach verschachtelten Typ-IDs wie admin.auth.UserRecord und admin.database.Reference mehr verwenden. Da jeder Typ genau einem Modul zugewiesen ist, können Sie sie einfach anhand ihrer Kurznamen wie UserRecord und Reference importieren.

Hier sind alle Moduleinstiegspunkte, die in der Version 10 des SDK verfügbar sind:

  • firebase-admin/app
  • firebase-admin/auth
  • firebase-admin/database
  • firebase-admin/firestore
  • firebase-admin/instance-id
  • firebase-admin/machine-learning
  • firebase-admin/messaging
  • firebase-admin/project-management
  • firebase-admin/remote-config
  • firebase-admin/security-rules
  • firebase-admin/storage

In der folgenden Tabelle finden Sie die Ersatzimportsyntax für jede der alten Namespacefunktionen:

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();

In der App exportierte Funktionen anstelle von Methoden verwenden

In der alten API wurden für das App-Objekt mehrere Methoden wie app.auth() und app.database() freigegeben. Wir empfehlen Entwicklern, diese Methoden nicht zu verwenden, sondern stattdessen die oben beschriebenen Modul-Einstiegspunkte zu verwenden, um Dienstinstanzen für ein bestimmtes App-Objekt abzurufen und andere appspezifische Aufgaben auszuführen.

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);

Unterstützung für ES-Module

Node.js 12 und höher bieten experimentelle Unterstützung für ES-Module, sodass auch Entwickler ohne TypeScript die Schlüsselwörter export und import in ihrem Code verwenden können. Ab Version 10 unterstützt das Admin Node.js SDK auch ES-Module. Entwickler, die ES-Module in reinem Node.js implementieren, können das SDK dann mit der import-Syntax importieren.

Wenn Sie ES-Module mit der Admin SDK verwenden möchten, müssen Sie zuerst den ESM-Support für Ihre Node.js-Laufzeit aktivieren. Dazu wird der Datei package.json normalerweise ein "type": "module"-Feld hinzugefügt. Dann können Sie Anwendungscode schreiben, der so aussieht:

// 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');