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

W wersji 10 pakietu Admin Node.js SDK są wprowadzane 2 ważne zmiany:

  • Wycofanie obsługi środowiska Node.js 10 (to zmiana powodująca niezgodność)
  • Pakiet SDK przyjął 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 pakietu Admin SDK do wersji 10.

Zaktualizuj środowisko Node.js do wersji 12 lub nowszej

Od wersji 10 pakietu Admin Node.js SDK Firebase nie obsługuje już Node.js 10. Podczas korzystania z pakietu Admin SDK deweloperzy muszą używać środowiska Node.js w wersji 12 lub nowszej. Jeśli używasz pakietu Admin Node.js SDK razem z Cloud Functions dla Firebase, sprawdź, czy masz uaktualnioną wersję środowiska Node.js do wersji 12 lub nowszej.

Używaj modułów zamiast przestrzeni nazw

Od swojego powstania pakiet Admin Node.js SDK oferuje stabilną strukturę interfejsu API zagnieżdżoną hierarchią przestrzeni nazw. W rezultacie być może znasz już kod, 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 w celu uzyskiwania dostępu do różnych interfejsów API pakietu SDK zamiast używania globalnej przestrzeni nazw admin.

Tak wyglądałby przykład z nowymi punktami wejścia do 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 musisz bezpośrednio zaimportować potrzebne symbole z kilku punktów wejścia modułu. Oprócz tego deweloperzy TypeScript nie muszą już używać potrójnie zagnieżdżonych identyfikatorów typów, takich jak admin.auth.UserRecord i admin.database.Reference. Ponieważ każdy typ należy do dokładnie 1 modułu, możesz po prostu zaimportować je według ich krótkich nazw, np. UserRecord i Reference.

Poniżej przedstawiamy wszystkie punkty wejścia modułów dostępne w pakiecie SDK od wersji 10:

  • firebase-admin/aplikacja
  • firebase-admin/auth
  • firebase-admin/database
  • Firebase-admin/firestore
  • firebase-admin/identyfikator-instancji
  • Firebase-admin/machine-learning
  • firebase-admin/komunikatory
  • administrator-projektu/zarządzanie-projektem
  • firebase-admin/remote-config
  • firebase-admin/security-rules
  • firebase-admin/storage

W tej tabeli znajdziesz zastępczą składnię importu dla każdej ze starszych funkcji przestrzeni nazw:

wersja 9 wersja 10
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 aplikacji

W starszej wersji interfejsu API obiekt App udostępniał wiele metod, takich jak app.auth() i app.database(). Zalecamy deweloperom unikanie tych metod i korzystanie z opisanych powyżej punktów wejścia modułu w celu uzyskiwania instancji usług ograniczonych do danego obiektu App i wykonywania innych zadań związanych z aplikacją.

wersja 9 wersja 10
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 oferują eksperymentalną obsługę modułów ES, dzięki czemu nawet programiści niekorzystający z TypeScriptu mogą używać słów kluczowych export i import w swoim kodzie. Od wersji 10 pakiet Admin Node.js SDK zapewnia też obsługę modułów ES, dzięki czemu deweloperzy implementujący moduły ES w zwykłym środowisku Node.js mogą importować pakiet SDK przy użyciu składni import.

Aby używać modułów ES z pakietem Admin SDK, najpierw sprawdź, czy masz włączoną 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 podobny do tego:

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