Esegui l'upgrade a Node.js SDK Admin SDK v10 (SDK modulare)

La versione 10 dell'SDK Admin Node.js introduce due importanti modifiche:

  • Il supporto per Node.js 10 è interrotto (si tratta di una modifica importante )
  • L'SDK ha adottato un modello API modulare

Questa guida fornisce istruzioni e informazioni per aiutare gli sviluppatori ad aggiornare le app Node.js esistenti dalle versioni precedenti di Admin SDK alla versione v10.

Aggiorna Node.js alla versione 12 o successiva

Con la versione Admin Node.js SDK v10, Firebase ha interrotto il supporto per Node.js 10. Gli sviluppatori devono utilizzare Node.js 12 o versione successiva quando utilizzano Admin SDK. Se utilizzi l'SDK Admin Node.js insieme a Cloud Functions for Firebase, assicurati di aver aggiornato la versione di Node.js alla 12 o successiva.

Utilizza i moduli invece degli spazi dei nomi

Fin dal suo inizio, l'SDK Admin Node.js ha offerto un'API stabile strutturata come una gerarchia di spazi dei nomi nidificati. Di conseguenza, potresti aver acquisito familiarità con la scrittura di codice simile a questo:

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

A partire dalla versione 10, l'SDK Admin Node.js offre più punti di ingresso del modulo con esportazioni denominate. Consigliamo agli sviluppatori di utilizzare questi nuovi punti di ingresso per accedere alle varie API dell'SDK invece di utilizzare lo spazio dei nomi admin globale.

Ecco come apparirebbe l'esempio sopra con i nuovi punti di ingresso del modulo:

Dattiloscritto

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

Utilizzando punti di ingresso modulari v10

Tieni presente che, negli esempi precedenti, non stai più importando uno spazio dei nomi admin globale. Invece, importi esplicitamente solo i simboli necessari da diversi punti di ingresso del modulo. Inoltre, gli sviluppatori TypeScript non devono più utilizzare identificatori di tipo triplo annidati come admin.auth.UserRecord e admin.database.Reference . Poiché ogni tipo appartiene esattamente a un modulo, puoi semplicemente importarli con i loro nomi brevi come UserRecord e Reference .

Ecco tutti i punti di ingresso del modulo disponibili nell'SDK a partire dalla v10:

  • firebase-admin/app
  • firebase-admin/auth
  • firebase-amministratore/database
  • firebase-admin/firestore
  • firebase-admin/istanza-id
  • firebase-admin/machine-learning
  • firebase-admin/messaggistica
  • firebase-admin/project-management
  • firebase-admin/remote-config
  • firebase-admin/security-rules
  • firebase-admin/storage

La tabella seguente mostra la sintassi di importazione sostitutiva per ciascuna delle funzioni dello spazio dei nomi legacy:

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

Utilizza le funzioni esportate anziché i metodi sull'app

Nell'API legacy, l'oggetto App espone una serie di metodi come app.auth() e app.database() . Consigliamo agli sviluppatori di evitare di usare questi metodi e di usare invece gli stessi punti di ingresso del modulo descritti sopra per ottenere istanze del servizio con ambito a un determinato oggetto App ed eseguire altre attività specifiche dell'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);

Supporto dei moduli ES

Node.js 12 e versioni successive sono dotati di supporto sperimentale per i moduli ES, consentendo anche agli sviluppatori non TypeScript di utilizzare le parole chiave export e import nel proprio codice. A partire dalla versione v10, l'SDK Admin Node.js fornisce anche il supporto dei moduli ES, in modo che gli sviluppatori che implementano i moduli ES su Node.js semplice possano importare l'SDK utilizzando la sintassi import .

Per utilizzare i moduli ES con Admin SDK, assicurati innanzitutto di aver abilitato il supporto ESM per il runtime Node.js. Questo di solito viene fatto aggiungendo un campo "type": "module" al file package.json . Quindi puoi scrivere il codice dell'applicazione simile a questo:

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