Wersja 10 pakietu Admin Node.js SDK wprowadza 2 ważne zmiany:
- Wycofanie obsługi Node.js 10 (jest to zmiana powodująca niezgodność).
- Pakiet SDK korzysta z modułowego wzorca interfejsu API.
Ten przewodnik zawiera instrukcje i informacje, które pomogą deweloperom uaktualnić istniejące aplikacje Node.js z wcześniejszych wersji Admin SDK do wersji 10.
Aktualizacja Node.js do wersji 12 lub nowszej
Wraz z wydaniem pakietu Admin Node.js SDK w wersji 10 Firebase wycofało obsługę Node.js 10. Deweloperzy muszą używać Node.js 12 lub nowszej wersji, gdy korzystają z Admin SDK. Jeśli używasz pakietu Admin Node.js SDK razem z Cloud Functions for Firebase, upewnij się, że masz zaktualizowaną wersję Node.js do wersji 12 lub nowszej.
Używanie modułów zamiast przestrzeni nazw
Od samego początku pakiet Admin Node.js SDK oferuje stabilny interfejs API o strukturze hierarchii zagnieżdżonych przestrzeni nazw. W rezultacie możesz być przyzwyczajony(-a) do pisania kodu, który wygląda tak:
// 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');
Od wersji 10 pakiet Admin Node.js SDK oferuje wiele punktów wejścia modułu z nazwanymi eksportami. Zalecamy deweloperom korzystanie z tych nowych punktów wejścia, aby uzyskiwać dostęp do różnych interfejsów API pakietu SDK, zamiast używać globalnej przestrzeni nazw admin.
Oto jak wyglądałby powyższy przykład z nowymi punktami wejścia modułu:
TypeScript
// 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');
Używanie modułowych punktów wejścia w wersji 10
Zwróć uwagę, że w powyższych przykładach nie importujesz już globalnej przestrzeni nazw admin. Zamiast tego jawnie importujesz tylko symbole, których potrzebujesz, z kilku punktów wejścia modułu. Ponadto deweloperzy TypeScript nie muszą już używać identyfikatorów typów zagnieżdżonych w 3 poziomach, takich jak admin.auth.UserRecord i admin.database.Reference. Ponieważ każdy typ należy do dokładnie 1 modułu, możesz je importować za pomocą krótkich nazw, takich jak UserRecord i Reference.
Oto wszystkie punkty wejścia modułu dostępne w pakiecie SDK od wersji 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/storage
W tabeli poniżej przedstawiono składnię importu zastępczego dla każdej z funkcji starszej przestrzeni nazw:
| Wersja 9 | Wersja 10 |
|---|---|
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'
|
Używanie eksportowanych funkcji zamiast metod w aplikacji
W starszym interfejsie API obiekt App udostępniał kilka metod, takich jak app.auth() i app.database(). Zalecamy deweloperom, aby nie używali tych metod, ale zamiast tego używali tych samych punktów wejścia modułu opisanych powyżej, aby uzyskać instancje usługi w zakresie danego obiektu App i wykonywać inne zadania związane z aplikacją.
| Wersja 9 | Wersja 10 |
|---|---|
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';
|
Obsługa modułów ES
Node.js 12 i nowsze wersje mają eksperymentalną obsługę modułów ES, co umożliwia nawet deweloperom, którzy nie używają TypeScript, używanie w kodzie słów kluczowych export i import. Od wersji 10 pakiet Admin Node.js SDK obsługuje też moduły ES, dzięki czemu deweloperzy implementujący moduły ES w zwykłym Node.js mogą importować pakiet SDK za pomocą składni import.
Aby używać modułów ES z pakietem Admin SDK, najpierw upewnij się, że masz włączoną obsługę ESM
w środowisku wykonawczym Node.js. Zwykle robi się to, dodając pole "type":
"module" do pliku package.json. Następnie możesz napisać kod aplikacji, który wygląda tak:
// 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');