الترقية إلى الإصدار 10 من SDK Admin SDK في Node.js (حزمة SDK معيارية)

يقدم الإصدار 10 من SDK للمشرف Node.js تغييرين مهمين:

  • تم إيقاف اعتماد Node.js 10 (هذا تغيير قد لا يكون متوافقًا)
  • استخدمت حزمة تطوير البرامج (SDK) نمطًا نموذجيًا لواجهة برمجة التطبيقات.

يوفّر هذا الدليل تعليمات ومعلومات لمساعدة المطوّرين في ترقية تطبيقات Node.js الحالية من الإصدارات السابقة من SDK للمشرف إلى الإصدار 10.

يجب تحديث Node.js إلى الإصدار 12 أو إصدار أحدث

باستخدام الإصدار 10 من حزمة تطوير البرامج (SDK) الخاصة بـ Node.js في Firebase، توقف Firebase عن دعم Node.js 10. على المطوّرين استخدام Node.js 12 أو إصدار أحدث عند استخدام SDK للمشرف. إذا كنت تستخدم حزمة تطوير البرامج (SDK) الخاصة بـ Node.js للمشرف مع دوال Cloud لبرنامج Firebase، تأكّد من ترقية إصدار Node.js لديك إلى الإصدار 12 أو إصدار أحدث.

استخدام الوحدات بدلاً من مساحات الاسم

وفّرت حزمة تطوير البرامج (SDK) الخاصة بـ Node.js للمشرف منذ إطلاقها واجهة برمجة تطبيقات ثابتة على شكل تسلسل هرمي مدمَج لمساحة الاسم. نتيجة لذلك، ربما تكون قد أصبحت على دراية بكتابة التعليمات البرمجية التي تبدو كالتالي:

// 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) الخاصة بالمشرف في Node.js نقاط إدخال وحدات متعددة مع عمليات تصدير مُسَمّاة. ننصح مطوّري البرامج باستخدام نقاط الدخول الجديدة هذه للوصول إلى واجهات برمجة التطبيقات المتنوعة في حزمة 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/تعلُّم الآلة
  • المشرف/المراسلة في firebase
  • firebase-admin/project-management
  • firebase-admin/remote-config
  • Firebase-admin/security-rules
  • firebase-admin/storage

يعرض الجدول التالي بنية الاستيراد البديلة لكل من دوال مساحة الاسم القديمة:

الإصدار 9 الإصدار 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();

استخدام الدوال التي تم تصديرها بدلاً من الطرق في التطبيق

في واجهة برمجة التطبيقات القديمة، عرض الكائن App عددًا من الطرق، مثل app.auth() وapp.database(). وننصح المطوّرين بتجنُّب استخدام هذه الطرق، واستخدام نقاط إدخال الوحدات نفسها الموضّحة أعلاه للحصول على مثيلات الخدمة المخصّصة لعنصر App معيّن وتنفيذ مهام أخرى خاصة بالتطبيق.

الإصدار 9 الإصدار 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);

التوافق مع وحدات اللغة الإسبانية

يتوافق الإصدار 12 من Node.js والإصدارات الأحدث مع دعم تجريبي لوحدات ES، ما يتيح للمطوّرين الذين لا يستخدمون TypeScript استخدام الكلمتَين الرئيسيتَين export وimport في الرموز البرمجية الخاصة بهم. بدءًا من الإصدار 10، توفّر "حزمة تطوير البرامج (SDK) الخاصة بـ Node.js للمشرف" أيضًا دعمًا لوحدات ES، ليتمكّن المطوّرون الذين ينفِّذون وحدات ES على Node.js العادي من استيراد حزمة SDK باستخدام بنية import.

لاستخدام وحدات ES مع "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');