שדרג מגרסה 8 ל- SDK האינטרנט המודולרי

אפליקציות שמשתמשות כעת ב- Firebase Web SDK גירסה 8 ומעלה צריכות לשקול לעבור לגרסה 9 על פי ההנחיות במדריך זה.

מדריך זה מבוסס על ההנחה שאתה מכיר גרסה 8 ושאתם תנצלו מודול bundler כגון webpack או אוסף עבור שדרוג ופיתוח 9 מתמשכת גרסה.

מומלץ מאוד להשתמש באוסף מודולים בסביבת הפיתוח שלך. אם אינך משתמש באחד מהם, לא תוכל לנצל את היתרונות העיקריים של גירסה 9 בגודל אפליקציה מופחת. תצטרך NPM או חוט כדי להתקין את ה- SDK.

שלבי השדרוג במדריך זה יתבססו על אפליקציית אינטרנט דמיונית המשתמשת ב- SDKs Authentication ו- Cloud Firestore. על ידי עיבוד הדוגמאות, תוכל לשלוט ברעיונות ובשלבים המעשיים הנדרשים לשדרוג כל SDKs Web Firebase הנתמכים.

על ספריות התאימות

ישנם שני סוגי ספריות הזמינות עבור Firebase Web SDK גירסה 9:

  • מודולרי - משטח API החדש נועד להקל רועד-עץ (הסרת קוד שאינו בשימוש) כדי להפוך את יישום האינטרנט שלך כפי קטן ומהיר ככל האפשר.
  • לתאימות - משטח API מוכרים אשר תואם באופן מלא עם SDK גרסה 8, מה שמאפשר לך לשדרג לגירסה 9 מבלי לשנות את כל קוד Firebase שלך בבת אחת. לספריות Compat אין יתרונות של גודל או ביצועים קטנים עד לא מעטים לעומת עמיתיהם בגרסה 8.

מדריך זה מניח שתנצל את ספריות התאימות של גירסה 9 כדי להקל על השדרוג שלך. ספריות אלה מאפשרות לך להמשיך להשתמש בקוד גירסה 8 לצד קוד ששופץ מחדש לגרסה 9. פירוש הדבר שתוכל לאסוף ולפתור באגים באפליקציה שלך בקלות רבה יותר תוך כדי תהליך השדרוג.

עבור אפליקציות עם חשיפה קטנה מאוד ל- Firebase Web SDK - לדוגמה, אפליקציה שעושה שיחה פשוטה לממשקי ה- API של האימות - ייתכן שיהיה מעשי לשחזר קוד גירסה 8 מבלי להשתמש בספריות התואמות גירסה 9. אם אתה משדרג אפליקציה כזו, תוכל לבצע את ההוראות במדריך זה עבור "גירסה 9 מודולרית" מבלי להשתמש בספריות התואמות.

לגבי תהליך השדרוג

כל שלב בתהליך השדרוג נרחב כך שתוכל לסיים לערוך את המקור לאפליקציה שלך ולאחר מכן לאסוף ולהריץ אותו ללא שבירה. לסיכום, הנה מה שתעשה לשדרוג אפליקציה:

  1. הוסף את ספריות גירסה 9 ואת הספריות התואמות לאפליקציה שלך.
  2. עדכן את הצהרות הייבוא ​​בקוד שלך לתואם v9.
  3. קוד רקטור למוצר יחיד (למשל אימות) לסגנון המודולרי.
  4. אופציונלי: בשלב זה, הסר את ספריית תאימות האימות וקוד התאימות לאימות על מנת לממש את היתרון בגודל האפליקציה לאימות לפני שתמשיך.
  5. פונקציות Refactor עבור כל מוצר (למשל, Cloud Firestore, FCM וכו ') לסגנון המודולרי, הידור ובדיקה עד להשלמת כל התחומים.
  6. עדכן את קוד האתחול לסגנון המודולרי.
  7. הסר את כל שאר הצהרות התאימות של גירסה 9 וקוד התאימות מהאפליקציה שלך.

הורד את גירסת 9 SDK

כדי להתחיל, קבל את ספריות גירסה 9 וספריות תואמות באמצעות npm:

npm i firebase@9.1.0

# OR

yarn add firebase@9.1.0

עדכן את הייבוא ​​לתואם v9

על מנת שהקוד שלך יפעל לאחר עדכון התלות שלך מ- 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';

רקטור לסגנון המודולרי

בעוד הגירסה 8 APIs מבוססים על דפוס מרחב ושירות ב"שרשרת נקודה, אמצעי גישה מודולרית של גרסה 9 שהקוד שלך יהיה מאורגן בעיקר סביב פונקציות. בגרסה 9, את firebase/app חבילה חבילות אחרות לא יחזירו הייצוא מקיף המכיל את כל השיטות מהחבילה. במקום זאת, החבילות מייצאות פונקציות בודדות.

בגרסה 9, השירותים מועברים כארגומנט הראשון, ואז הפונקציה משתמשת בפרטי השירות כדי לבצע את השאר. בואו נבחן כיצד זה פועל בשתי דוגמאות לשיפוץ שיחות לממשקי ה- API של אימות ו- Cloud Firestore.

דוגמה 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 ו- APIs מודולרית, ואילו מודולרית 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 מרחב. זה לא מומלץ להתקדם מכיוון שזה לא מאפשר חיסול קוד שאינו בשימוש. עם זאת, גרסת compat של SDK JavaScript עובדת עם window עבור מפתחים שמעדיפים לא מייד מתחיל את נתיב שדרוג מודולריים.

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

ספריית התאימות משתמשת בקוד מודולרי של גירסה 9 מתחת למכסה המנוע ומספקת לו את אותו API כמו גרסת 8 SDK; זה אומר שאתה יכול להתייחס התייחסות API גרסה 8 וקטעי קוד גרסה 8 לפרטים. שיטה זו אינה מומלצת לשימוש ארוך טווח, אלא כהתחלה לשדרוג לספריית הגירסה 9 המודולרית במלואה.

היתרונות והמגבלות של גרסה 9

לגרסה 9 המודולרית במלואה יש יתרונות אלה ביחס לגרסאות קודמות:

  • גרסה 9 מאפשרת גודל אפליקציה מופחת באופן דרמטי. הוא מאמץ את הפורמט המודרני של מודול JavaScript, ומאפשר שיטות "טלטול עצים", בהן אתה מייבא רק את החפצים שהאפליקציה שלך צריכה. בהתאם לאפליקציה שלך, טלטול עצים עם גירסה 9 יכול לגרום ל- 80% פחות קילוביט מאשר אפליקציה דומה שנבנתה באמצעות גירסה 8.
  • גרסה 9 תמשיך ליהנות מפיתוח תכנים מתמשך, בעוד שגירסה 8 תוקפא בשלב כלשהו בעתיד.