Обновление до Node.js SDK Admin SDK v10 (модульный SDK)

Версия 10 Admin Node.js SDK содержит два важных изменения:

  • Поддержка Node.js 10 прекращена (это критическое изменение )
  • В SDK принят модульный шаблон API.

В этом руководстве представлены инструкции и информация, которые помогут разработчикам обновить существующие приложения Node.js с более ранних версий Admin SDK до v10.

Обновите Node.js до версии 12 или выше.

В выпуске Admin Node.js SDK v10 компания Firebase прекратила поддержку Node.js 10. Разработчики должны использовать Node.js 12 или более позднюю версию при использовании Admin SDK . Если вы используете 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');

Начиная с версии 10, Admin Node.js SDK предлагает несколько точек входа в модуль с именованным экспортом. Мы рекомендуем разработчикам использовать эти новые точки входа для доступа к различным API SDK, а не использовать пространство имен глобального 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');

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

Использование модульных точек входа v10

Обратите внимание, что в приведенных выше примерах вы больше не импортируете пространство имен глобального admin . Вместо этого вы явно импортируете только те символы, которые вам нужны, из нескольких точек входа модуля. Кроме того, разработчикам TypeScript больше не нужно использовать идентификаторы типов с тройным вложением, такие как admin.auth.UserRecord и admin.database.Reference . Поскольку каждый тип принадлежит ровно одному модулю, вы можете просто импортировать их по коротким именам, например UserRecord и Reference .

Вот все точки входа модуля, доступные в SDK начиная с версии 10:

  • Firebase-администратор/приложение
  • Firebase-администратор/аутентификация
  • firebase-admin/база данных
  • администратор Firebase/Firestore
  • Firebase-admin/идентификатор-экземпляра
  • Firebase-администратор/машинное обучение
  • firebase-admin/обмен сообщениями
  • firebase-admin/управление проектами
  • Firebase-admin/удаленная конфигурация
  • firebase-admin/правила безопасности
  • 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();

Используйте экспортированные функции вместо методов в приложении.

В устаревшем 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, использовать ключевые слова export и import в своем коде. Начиная с версии 10, Admin Node.js SDK также обеспечивает поддержку ES-модулей, поэтому разработчики, реализующие ES-модули в простом Node.js, могут импортировать SDK, используя синтаксис import .

Чтобы использовать модули ES с Admin SDK , сначала убедитесь, что вы включили поддержку ESM для своей среды выполнения Node.js. Обычно это делается путем добавления поля "type": "module" в файл package.json . Затем вы можете написать код приложения, который выглядит следующим образом:

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