В десятой версии 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 . Если вы используете 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-admin/app
- firebase-admin/auth
- firebase-admin/database
- firebase-admin/firestore
- firebase-admin/instance-id
- firebase-admin/machine-learning
- firebase-admin/messaging
- firebase-admin/project-management
- firebase-admin/remote-config
- firebase-admin/security-rules
- firebase-admin/store
В следующей таблице показан синтаксис импорта для каждой из устаревших функций пространства имен:
| v9 | v10 |
|---|---|
admin.initializeApp() | import { initializeApp } from 'firebase-admin/app' |
admin.app() | import { getApp } from 'firebase-admin/ap' |
admin.credential.cert() | import { cert } from 'firebase-admin/app' |
admin.auth() | import { getAuth } from 'firebase-admin/auth' |
admin.database() | import { getDatabase } from 'firebase-admin/database' |
admin.firestore() | import { getFirestore } from 'firebase-admin/firestore' |
admin.instanceId() | import { getInstanceId } from 'firebase-admin/instance-id' |
admin.machineLearning() | import { getMachineLearning } from 'firebase-admin/machine-learning' |
admin.messaging() | import { getMessaging } from 'firebase-admin/messaging' |
admin.projectManagement() | import { getProjectManagement } from 'firebase-admin/project-management' |
admin.remoteConfig() | import { getRemoteConfig } from 'firebase-admin/remote-config' |
admin.securityRules() | import { getSecurityRules } from 'firebase-admin/security-rules' |
admin.storage() | import { getStorage } from 'firebase-admin/storage' |
Используйте экспортированные функции вместо методов в приложении.
В устаревшем API объект App предоставлял ряд методов, таких как app.auth() и app.database() . Мы рекомендуем разработчикам избегать использования этих методов и вместо этого использовать те же точки входа модуля, описанные выше, для получения экземпляров сервиса, привязанных к данному объекту App , и выполнения других задач, специфичных для приложения.
| v9 | v10 |
|---|---|
app.auth() | import { getAuth } from 'firebase-admin/auth'; |
app.database() | import { getDatabase } from 'firebase-admin/database'; |
app.database(url) | import { getDatabaseWithUrl } from 'firebase-admin/database'; |
app.firestore() | import { getFirestore } from 'firebase-admin/firestore' |
app.instanceId() | import { getInstanceId } from 'firebase-admin/instance-id' |
app.machineLearning() | import { getMachineLearning } from 'firebase-admin/machine-learning' |
app.messaging() | import { getMessaging } from 'firebase-admin/messaging' |
app.projectManagement() | import { getProjectManagement } from 'firebase-admin/project-management' |
app.remoteConfig() | import { getRemoteConfig } from 'firebase-admin/remote-config' |
app.securityRules() | import { getSecurityRules } from 'firebase-admin/security-rules' |
app.storage() | import { getStorage } from 'firebase-admin/storage' |
app.delete() | import { deleteApp } from 'firebase-admin/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');