Actualice a Node.js SDK Admin SDK v10 (SDK modular)

La versión 10 del SDK de Admin Node.js introduce dos cambios importantes:

  • Se suspende la compatibilidad con Node.js 10 (este es un cambio importante )
  • El SDK ha adoptado un patrón API modular

Esta guía proporciona instrucciones e información para ayudar a los desarrolladores a actualizar las aplicaciones Node.js existentes desde versiones anteriores del Admin SDK a la v10.

Actualice Node.js a v12 o superior

Con el lanzamiento de Admin Node.js SDK v10, Firebase dejó de admitir Node.js 10. Los desarrolladores deben usar Node.js 12 o superior cuando utilicen Admin SDK. Si está utilizando el SDK de Admin Node.js junto con Cloud Functions para Firebase, asegúrese de haber actualizado su versión de Node.js a 12 o superior.

Utilice módulos en lugar de espacios de nombres

Desde sus inicios, el SDK de Admin Node.js ha ofrecido una API estable estructurada como una jerarquía de espacios de nombres anidados. Como resultado, es posible que se haya familiarizado con la escritura de código similar a este:

// 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 partir de la versión 10, el SDK de Admin Node.js ofrece múltiples puntos de entrada de módulos con exportaciones con nombre. Recomendamos a los desarrolladores que utilicen estos nuevos puntos de entrada para acceder a las distintas API del SDK, en lugar de utilizar el espacio de nombres admin global.

Así es como se vería el ejemplo anterior con los nuevos puntos de entrada del módulo:

Mecanografiado

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

Nodo.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');

Uso de puntos de entrada modulares v10

Tenga en cuenta que, en los ejemplos anteriores, ya no importa un espacio de nombres admin global. En su lugar, importa explícitamente solo los símbolos que necesita desde varios puntos de entrada del módulo. Además, los desarrolladores de TypeScript ya no tienen que usar identificadores de tipo anidados triples como admin.auth.UserRecord y admin.database.Reference . Dado que cada tipo pertenece exactamente a un módulo, puede importarlos simplemente por sus nombres cortos como UserRecord y Reference .

Estos son todos los puntos de entrada del módulo disponibles en el SDK a partir de la versión 10:

  • firebase-admin/aplicación
  • firebase-admin/auth
  • firebase-admin/base de datos
  • firebase-admin/firestore
  • firebase-admin/id-instancia
  • firebase-admin/aprendizaje automático
  • firebase-admin/mensajería
  • firebase-admin/gestión-de-proyectos
  • firebase-admin/configuración remota
  • firebase-admin/reglas-de-seguridad
  • firebase-admin/almacenamiento

La siguiente tabla muestra la sintaxis de importación de reemplazo para cada una de las funciones de espacio de nombres heredadas:

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

Utilice funciones exportadas en lugar de métodos en la aplicación

En la API heredada, el objeto App exponía una serie de métodos como app.auth() y app.database() . Recomendamos a los desarrolladores que eviten el uso de estos métodos y, en su lugar, utilicen los mismos puntos de entrada del módulo descritos anteriormente para obtener instancias de servicio con alcance para un objeto App determinado y realizar otras tareas específicas de la aplicación.

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

Soporte de módulos ES

Node.js 12 y superiores vienen con soporte experimental para módulos ES, lo que permite incluso a los desarrolladores que no son TypeScript usar las palabras clave export e import en su código. A partir de la versión v10, el SDK de Admin Node.js también proporciona soporte para módulos ES, de modo que los desarrolladores que implementan módulos ES en Node.js simple pueden importar el SDK usando la sintaxis import .

Para usar módulos ES con Admin SDK, primero asegúrese de haber habilitado la compatibilidad con ESM para su tiempo de ejecución de Node.js. Esto generalmente se hace agregando un campo "type": "module" a su archivo package.json . Luego puedes escribir un código de aplicación similar a este:

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