Версия 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' |
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');