Atualizar para Node.js SDK Admin SDK v10 (SDK modular)

A versão 10 do SDK Admin Node.js apresenta duas mudanças importantes:

  • O suporte para Node.js 10 foi descontinuado (esta é uma alteração significativa )
  • O SDK adotou um padrão de API modular

Este guia fornece instruções e informações para ajudar os desenvolvedores a atualizar aplicativos Node.js existentes de versões anteriores do SDK Admin para a v10.

Atualize o Node.js para v12 ou superior

Com a versão Admin Node.js SDK v10, o Firebase descontinuou o suporte para Node.js 10. Os desenvolvedores devem usar Node.js 12 ou superior ao usar o Admin SDK. Se você estiver usando o SDK Admin Node.js junto com o Cloud Functions para Firebase, certifique-se de ter atualizado sua versão do Node.js para 12 ou superior.

Use módulos em vez de namespaces

Desde o seu início, o SDK Admin Node.js oferece uma API estável estruturada como uma hierarquia de namespace aninhada. Como resultado, você deve estar familiarizado com a escrita de código semelhante 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 da v10, o SDK Admin Node.js oferece vários pontos de entrada de módulo com exportações nomeadas. Recomendamos que os desenvolvedores usem esses novos pontos de entrada para acessar as diversas APIs do SDK, em vez de usar o namespace admin global.

Esta é a aparência do exemplo acima com os novos pontos de entrada do módulo:

Texto datilografado

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

Usando pontos de entrada modulares v10

Observe que, nos exemplos acima, você não está mais importando um namespace admin global. Em vez disso, você importa explicitamente apenas os símbolos necessários de vários pontos de entrada do módulo. Além disso, os desenvolvedores TypeScript não precisam mais usar identificadores de tipo aninhados triplos, como admin.auth.UserRecord e admin.database.Reference . Como cada tipo pertence a exatamente um módulo, você pode importá-los apenas por seus nomes abreviados, como UserRecord e Reference .

Aqui estão todos os pontos de entrada do módulo disponíveis no SDK a partir da v10:

  • firebase-admin/app
  • firebase-admin/auth
  • firebase-admin/banco de dados
  • firebase-admin/firestore
  • firebase-admin/instance-id
  • firebase-admin/aprendizado de máquina
  • firebase-admin/mensagens
  • firebase-admin/gerenciamento de projetos
  • firebase-admin/configuração remota
  • firebase-admin/regras de segurança
  • firebase-admin/armazenamento

A tabela a seguir mostra a sintaxe de importação de substituição para cada uma das funções de namespace herdadas:

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

Use funções exportadas em vez de métodos no aplicativo

Na API legada, o objeto App expôs vários métodos como app.auth() e app.database() . Recomendamos que os desenvolvedores evitem usar esses métodos e, em vez disso, usem os mesmos pontos de entrada do módulo descritos acima para obter instâncias de serviço com escopo definido para um determinado objeto App e executar outras tarefas específicas do aplicativo.

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

Suporte a módulos ES

Node.js 12 e superior vêm com suporte experimental para módulos ES, permitindo que até mesmo desenvolvedores não TypeScript usem palavras-chave export e import em seu código. A partir da versão v10, o SDK Admin Node.js também fornece suporte a módulos ES, para que os desenvolvedores que implementam módulos ES em Node.js simples possam importar o SDK usando a sintaxe import .

Para usar módulos ES com o SDK Admin, primeiro certifique-se de ter habilitado o suporte ESM para seu tempo de execução Node.js. Isso geralmente é feito adicionando um campo "type": "module" ao seu arquivo package.json . Então você pode escrever um código de aplicativo parecido com 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');