قم بالترقية من الإصدار 8 إلى Web SDK المعياري

يجب أن تفكر التطبيقات التي تستخدم Firebase Web SDK الإصدار 8 أو أقدم في الترحيل إلى الإصدار 9 باستخدام الإرشادات الواردة في هذا الدليل. يفترض هذا دليل على أن كنت معتادا على الإصدار 8 والتي سوف تستفيد من وحدة نمطية محزم مثل webpack أو التراكمي لتطوير ونسخة المستمر 9 التنمية.

يوصى بشدة باستخدام أداة تجميع الوحدات في بيئة التطوير الخاصة بك. إذا لم تستخدم واحدًا ، فلن تتمكن من الاستفادة من المزايا الرئيسية للإصدار 9 في حجم التطبيق المنخفض. ستحتاج الآلية الوقائية الوطنية أو الغزل لتثبيت SDK.

ستعتمد خطوات الترقية في هذا الدليل على تطبيق ويب وهمي يستخدم مصادقة وحزم SDK لـ Cloud Firestore. من خلال العمل من خلال الأمثلة ، يمكنك إتقان المفاهيم والخطوات العملية المطلوبة لترقية جميع مجموعات Firebase Web SDK المدعومة.

حول المكتبات المتوافقة

يتوفر نوعان من المكتبات للإصدار 9 من Firebase Web SDK:

  • وحدات - سطح API جديدة تهدف إلى تسهيل تهز شجرة (إزالة من التعليمات البرمجية غير المستخدمة) لجعل التطبيق الويب الخاص بك كما صغيرة وأسرع وقت ممكن.
  • المتوافق - سطح API دراية والذي يتوافق تماما مع SDK الإصدار 8، مما يسمح لك للترقية إلى الإصدار 9 من دون تغيير عن رمز Firebase في وقت واحد. تتمتع مكتبات Compat بمزايا حجم أو أداء قليلة أو معدومة مقارنة بنظيراتها من الإصدار 8.

يفترض هذا الدليل أنك ستستفيد من مكتبات الإصدار 9 المتوافقة لتسهيل الترقية. تسمح لك هذه المكتبات بالاستمرار في استخدام كود الإصدار 8 جنبًا إلى جنب مع التعليمات البرمجية المعاد تصميمها للإصدار 9. وهذا يعني أنه يمكنك تجميع وتصحيح تطبيقك بسهولة أكبر أثناء عملك خلال عملية الترقية.

بالنسبة للتطبيقات ذات التعرض الضئيل جدًا لـ Firebase Web SDK - على سبيل المثال ، تطبيق يقوم بإجراء مكالمة بسيطة فقط إلى واجهات برمجة تطبيقات المصادقة - قد يكون من العملي إعادة صياغة كود الإصدار 8 دون استخدام مكتبات الإصدار 9 المتوافقة. إذا كنت تقوم بترقية مثل هذا التطبيق ، فيمكنك اتباع التعليمات الواردة في هذا الدليل لـ "الإصدار 9 المعياري" دون استخدام المكتبات المتوافقة.

حول عملية الترقية

يتم تحديد نطاق كل خطوة من خطوات عملية الترقية بحيث يمكنك إنهاء تحرير المصدر لتطبيقك ثم تجميعه وتشغيله دون انقطاع. باختصار ، إليك ما ستفعله لترقية أحد التطبيقات:

  1. أضف مكتبات الإصدار 9 والمكتبات المتوافقة إلى تطبيقك.
  2. قم بتحديث بيانات الاستيراد في التعليمات البرمجية الخاصة بك إلى الإصدار 9 المتوافق.
  3. كود Refactor لمنتج واحد (على سبيل المثال ، المصادقة) إلى النمط المعياري.
  4. اختياري: في هذه المرحلة ، قم بإزالة مكتبة توافق المصادقة ورمز التوافق للمصادقة من أجل تحقيق فائدة حجم التطبيق للمصادقة قبل المتابعة.
  5. وظائف Refactor لكل منتج (على سبيل المثال ، Cloud Firestore و FCM وما إلى ذلك) إلى النمط المعياري والتجميع والاختبار حتى تكتمل جميع المناطق.
  6. تحديث كود التهيئة إلى النمط المعياري.
  7. قم بإزالة جميع بيانات التوافق المتبقية في الإصدار 9 ورمز التوافق من تطبيقك.

احصل على الإصدار 9 SDK

للبدء ، احصل على الإصدار 9 من المكتبات والمكتبات المتوافقة باستخدام npm:

npm i firebase@9.0.0-beta.7

# OR

yarn add firebase@9.0.0-beta.7

قم بتحديث الواردات إلى الإصدار 9 المتوافق

من أجل الحفاظ على عمل التعليمات البرمجية الخاصة بك بعد تحديث التبعية الخاصة بك من v8 إلى v9 beta ، قم بتغيير عبارات الاستيراد الخاصة بك لاستخدام الإصدار "المتوافق" لكل عملية استيراد. فمثلا:

قبل: الإصدار 8

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';

بعد: الإصدار 9 المتوافق

// v9 compat packages are API compatible with v8 code
import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';

Refactor على النمط المعياري

في حين تستند الإصدار 8 واجهات برمجة التطبيقات على مساحة وخدمة نمط بالسلاسل نقطة، الإصدار 9 وسائل نهج وحدات من شأنها أن تنظم التعليمات البرمجية بشكل أساسي حول الوظائف. في الإصدار 9، firebase/app حزمة ومجموعات أخرى لا يعودون تصدير شامل يحتوي على كافة الطرق من الحزمة. بدلاً من ذلك ، تقوم الحزم بتصدير الوظائف الفردية.

في الإصدار 9 ، يتم تمرير الخدمات كوسيطة أولى ، ثم تستخدم الوظيفة تفاصيل الخدمة للقيام بالباقي. دعونا نفحص كيفية عمل ذلك في مثالين يستدعيان المصادقة و Cloud Firestore APIs.

مثال 1: إعادة هيكلة دالة المصادقة

قبل: الإصدار 9 المتوافق

كود الإصدار 9 مطابق لرمز الإصدار 8 ، لكن الواردات تغيرت.

import firebase from "firebase/compat/app";
import "firebase/compat/auth";

const auth = firebase.auth();
auth.onAuthStateChanged(user => { 
  // Check for user status
});

بعد: الإصدار 9 المعياري

و getAuth الدالة تأخذ firebaseApp كمعلمة أولى. و onAuthStateChanged لا يتم ربط وظيفة من auth المثال كما أنه سيكون في الإصدار 8؛ بدلا من ذلك، انها وظيفة الحرة التي تستغرق auth كمعلمة أولى.

import { getAuth, onAuthStateChanged } from "firebase/auth";

const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
  // Check for user status
});

مثال 2: إعادة هيكلة وظيفة Cloud Firestore

قبل: الإصدار 9 المتوافق

import "firebase/compat/firestore"

const db = firebase.firestore();
db.collection("cities").where("capital", "==", true)
    .get()
    .then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            // doc.data() is never undefined for query doc snapshots
            console.log(doc.id, " => ", doc.data());
        });
    })
    .catch((error) => {
        console.log("Error getting documents: ", error);
    });

بعد: الإصدار 9 المعياري

و getFirestore الدالة تأخذ firebaseApp كمعلمة الأولى، التي تم إرجاعها من initializeApp في المثال السابق. لاحظ كيف أن الكود الخاص بتكوين استعلام مختلف تمامًا في الإصدار 9 ؛ ليس هناك تسلسل، وطرق مثل query أو where يتعرضون الآن وظائف خالية.

import { getFirestore, collection, query, where, getDocs } from "firebase/firestore";

const db = getFirestore(firebaseApp);

const q = query(collection(db, "cities"), where("capital", "==", true));

const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
  // doc.data() is never undefined for query doc snapshots
  console.log(doc.id, " => ", doc.data());
});

مثال 3: دمج أنماط كود الإصدار 8 والإصدار 9

يتيح لك استخدام المكتبات المتوافقة أثناء الترقية الاستمرار في استخدام رمز الإصدار 8 جنبًا إلى جنب مع الرمز المعاد تشكيله للإصدار 9. وهذا يعني أنه يمكنك الاحتفاظ برمز الإصدار 8 الحالي لـ Cloud Firestore أثناء إعادة بناء المصادقة أو رمز Firebase SDK الآخر إلى نمط الإصدار 9 ، ولا يزال تجميع تطبيقك بنجاح باستخدام كلا نمطي الكود. ونفس الشيء ينطبق على الإصدار 8 والإصدار 9 كود ضمن منتج مثل الغيمة Firestore. يمكن أن تتواجد أنماط التعليمات البرمجية الجديدة والقديمة ، طالما أنك تستورد الحزم المتوافقة:

import firebase from 'firebase/compat/app';
import 'firebase/compat/firestore';
import { getDoc } from 'firebase/firestore'

const docRef = firebase.firestore().doc();
getDoc(docRef);

ضع في اعتبارك أنه على الرغم من أن تطبيقك سيتم تجميعه ، فلن تحصل على مزايا حجم التطبيق من الكود المعياري حتى تقوم بإزالة عبارات التوافق والرمز بالكامل من تطبيقك.

تحديث كود التهيئة

قم بتحديث رمز التهيئة للتطبيق الخاص بك لاستخدام بناء جملة الإصدار 9 المعياري الجديد. ومن المهم لتحديث هذا الرمز بعد الانتهاء من إعادة بيع ديون كافة التعليمات البرمجية في التطبيق الخاص بك؛ ذلك لأن firebase.initializeApp() تهيئة الحالة العالمية لكل من COMPAT واجهات برمجة التطبيقات وحدات، في حين أن وحدات initializeApp() وظيفة تهيئة فقط الدولة لوحدات.

قبل: الإصدار 9 المتوافق

import firebase from "firebase/compat/app"

firebase.initializeApp({ /* config */ });

بعد: الإصدار 9 المعياري

import { initializeApp } from "firebase/app"

const firebaseApp = initializeApp({ /* config */ });

إزالة رمز التوافق

لتحقيق الفوائد المرجوة حجم SDK وحدات الإصدار 9، يجب في نهاية المطاف تحويل جميع دعوات إلى النمط المعياري هو مبين أعلاه وإزالة كافة import "firebase/compat/* البيانات من التعليمات البرمجية. عند الانتهاء، يجب أن يكون هناك المزيد من الإشارات إلى firebase.* مساحة العالمي أو أي رمز آخر في أسلوب SDK الإصدار 8.

مزايا وقيود الإصدار 9

يحتوي الإصدار 9 المعياري بالكامل على هذه المزايا مقارنة بالإصدارات السابقة:

  • يتيح الإصدار 9 تقليل حجم التطبيق بشكل كبير. وهي تعتمد تنسيق وحدة JavaScript الحديثة ، مما يسمح بممارسات "اهتزاز الشجرة" التي لا تستورد فيها سوى العناصر التي يحتاجها تطبيقك. اعتمادًا على التطبيق الخاص بك ، يمكن أن يؤدي اهتزاز الشجرة مع الإصدار 9 إلى تقليل كيلوبايتات أقل بنسبة 80٪ من تطبيق مشابه تم إنشاؤه باستخدام الإصدار 8.
  • سيستمر الإصدار 9 في الاستفادة من التطوير المستمر للميزات ، بينما سيتم تجميد الإصدار 8 في وقت ما في المستقبل.

يجب أن يكون مستخدمو الإصدار 9 المعياري SDK على دراية بهذه القيود في الإصدار التجريبي:

  • V9 غير موجود حاليا متوافق مع IAP باستخدام هويات الخارجية (مشاريع Google Cloud Platform الهوية).
  • Modular v9 غير متوافق حاليًا مع FirebaseUI للويب. تسمح مكتبة v9 المتوافقة باستخدامها جنبًا إلى جنب مع الإصدار 9 ، ولكن بدون تقليل حجم التطبيق والمزايا الأخرى لـ v9 SDK.