Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

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

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

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

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

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

  • firebase-admin/приложение
  • firebase-admin/авторизация
  • firebase-admin/база данных
  • firebase-admin/firestore
  • firebase-admin/instance-id
  • firebase-admin/машинное обучение
  • firebase-admin/обмен сообщениями
  • firebase-admin/управление проектами
  • firebase-администратор/удаленный-config
  • firebase-admin/правила безопасности
  • firebase-admin/хранилище

В следующей таблице показан синтаксис замены импорта для каждой из устаревших функций пространства имен:

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