שדרוג ל-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 ואילך

עם ההשקה של Admin Node.js SDK v10, ‏ Firebase הפסיקה את התמיכה ב-Node.js 10. מפתחים שמשתמשים ב-Admin SDK חייבים להשתמש ב-Node.js 12 ומעלה. אם אתם משתמשים ב-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, ערכת ה-SDK של Admin Node.js מציעה כמה נקודות כניסה למודולים עם ייצואים בעלי שמות. מומלץ למפתחים להשתמש בנקודות הכניסה החדשות האלה כדי לגשת לממשקי ה-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/messaging
  • firebase-admin/project-management
  • firebase-admin/remote-config
  • firebase-admin/security-rules
  • firebase-admin/storage

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

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

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

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

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

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