Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

ستعتمد خطوات الترقية في هذا الدليل على تطبيق ويب وهمي يستخدم مصادقة وحزمة تطوير برامج Cloud Firestore SDK. من خلال العمل من خلال الأمثلة ، يمكنك إتقان المفاهيم والخطوات العملية المطلوبة لترقية جميع مجموعات 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.1.3

# OR

yarn add firebase@9.1.3

قم بتحديث الواردات إلى الإصدار 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.

استخدام المكتبة المتوافقة من النافذة

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

<script src="https://www.gstatic.com/firebasejs/9.1.3/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.1.3/firebase-firestore-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.1.3/firebase-auth-compat.js"></script>
<script>
   const firebaseApp = firebase.initializeApp({ /* Firebase config */ });
   const db = firebaseApp.firestore();
   const auth = firebaseApp.auth();
</script>

تستخدم مكتبة التوافق كود الإصدار 9 المعياري تحت الغطاء وتوفر لها نفس واجهة برمجة التطبيقات مثل الإصدار 8 SDK ؛ هذا يعني أنه يمكنك الرجوع إلى مرجع API الإصدار 8 والإصدار 8 مقتطفات الشفرة للحصول على التفاصيل. لا يُنصح باستخدام هذه الطريقة على المدى الطويل ، ولكن كبداية للترقية إلى مكتبة الإصدار 9 المعياري بالكامل.

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

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

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