שדרוג ל-Node.js SDK Admin SDK v10 (SDK מודולרי)

גרסה 10 של Admin Node.js SDK כוללת שני שינויים חשובים:

  • התמיכה ב-Node.js 10 הופסקה (זהו שינוי מהותי)
  • ערכת ה-SDK עברה למודל של ממשק API מודולרי

המדריך הזה מספק הוראות ומידע שיעזרו למפתחים לשדרג אפליקציות Node.js קיימות מגרסאות קודמות של Admin SDK לגרסה 10.

עדכון Node.js לגרסה 12 ואילך

עם השקת הגרסה 10 של Admin Node.js SDK, התמיכה ב-Node.js 10 ב-Firebase הופסקה. מפתחים חייבים להשתמש ב-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.

כך תיראה הדוגמה שלמעלה עם נקודות הכניסה של המודול החדש:

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

שימוש בנקודות כניסה מודולריות בגרסה 10

שימו לב שבדוגמאות שלמעלה, כבר לא מייבאים מרחב שמות גלובלי של 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/העברת הודעות
  • firebase-admin/project-management
  • firebase-admin/remote-config
  • firebase-admin/security-rules
  • firebase-admin/storage

בטבלה הבאה מוצג התחביר של ייבוא הקבצים החלופי לכל אחת מהפונקציות הקודמות של מרחב השמות:

v9 גרסה 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();

שימוש בפונקציות שיוצאו במקום בשיטות באפליקציה

ב-API הקודם, האובייקט App חשף מספר שיטות כמו app.auth() ו-app.database(). אנחנו ממליצים למפתחים להימנע משימוש בשיטות האלה, ולהשתמש במקום זאת באותן נקודות הכניסה למודול שמתוארות למעלה כדי לקבל מכונות שירות בהיקף לאובייקט App נתון ולבצע משימות נוספות ספציפיות לאפליקציה.

v9 גרסה 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);

תמיכה במודולים של 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');