Uaktualnij pakiet SDK Admin do Node.js w wersji 10 (modułowy pakiet SDK)

Wersja 10 pakietu SDK Node.js administratora wprowadza 2 ważne zmiany:

  • Obsługa Node.js 10 została wycofana (jest to zmiana powodująca niezgodność).
  • Pakiet SDK ma modułowy wzorzec 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.

Zaktualizuj Node.js do wersji 12 lub nowszej.

Wraz z wersją 10 pakietu SDK Node.js dla administratora Firebase zakończyło obsługę Node.js 10. Deweloperzy muszą używać Node.js w wersji 12 lub nowszej, 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 początku istnienia pakiet Admin Node.js SDK oferuje stabilny interfejs API o strukturze zagnieżdżonej hierarchii przestrzeni nazw. W rezultacie możesz znać kod podobny do tego:

// 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 SDK Node.js administratora oferuje wiele punktów wejścia modułu z eksportami nazwanymi. Zalecamy deweloperom korzystanie z tych nowych punktów wejścia w celu uzyskiwania dostępu do różnych interfejsów API pakietu SDK zamiast używania 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');

Korzystanie z 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 możesz jawnie zaimportować tylko potrzebne symbole z kilku punktów wejścia modułu. Deweloperzy korzystający z TypeScriptu nie muszą już używać identyfikatorów typów z potrójnym zagnieżdżeniem, takich jak admin.auth.UserRecordadmin.database.Reference. Każdy typ należy do dokładnie jednego modułu, więc możesz go zaimportować, używając krótkiej nazwy, np. UserRecordReference.

Oto wszystkie punkty wejścia modułu dostępne w pakiecie SDK w 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 znajdziesz składnię importu zastępczego dla każdej funkcji starszej wersji przestrzeni nazw:

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

Używaj wyeksportowanych funkcji zamiast metod w obiekcie App

W starszej wersji interfejsu API obiekt App udostępniał kilka metod, takich jak app.auth()app.database(). Zalecamy deweloperom, aby nie używali tych metod, tylko korzystali z tych samych punktów wejścia modułu, które opisaliśmy powyżej, aby uzyskiwać instancje usług w zakresie danego obiektu App i wykonywać inne zadania specyficzne dla aplikacji.

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

Obsługa modułów ES

Node.js w wersji 12 i nowszych obsługuje eksperymentalnie moduły ES, co umożliwia nawet deweloperom niekorzystającym z TypeScriptu używanie w kodzie słów kluczowych exportimport. 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 środowisku Node.js mogą importować pakiet SDK za pomocą składni import.

Aby używać modułów ES z Admin SDK, najpierw włącz obsługę ESM w środowisku wykonawczym Node.js. Zwykle polega to na dodaniu pola "type": "module" do pliku package.json. Następnie możesz napisać kod aplikacji, który będzie 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');