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