בדף הזה מופיעים טיפים לפתרון בעיות ב-JavaScript שאתם עשויים להיתקל בהן במהלך השימוש ב-SDK Firebase JavaScript.
נתקלתם בבעיות אחרות או שהבעיה שלכם לא מופיעה כאן? כדאי לעיין בשאלות הנפוצות הראשיות בנושא Firebase כדי לקבל מידע נוסף על Firebase או על מוצרים ספציפיים.
אפשר גם לעיין בFirebase JavaScriptמאגר ה-SDK ב-GitHub כדי לראות רשימה עדכנית של בעיות שדווחו ופתרונות לבעיות, ולדווח שם על בעיות משלכם.
Admin SDK for Node.js constructs לא תואם ל-Firebase JavaScript SDK
Firebase Admin SDK ל-Node.js ו-Firebase JavaScript SDK הם הטמעות נפרדות שלא חולקות הגדרות של ממשק, מחלקה או פונקציה. מופעים של אובייקטים מסוג Admin SDK לא תואמים לפונקציות של Firebase JavaScript SDK.
לדוגמה, מופע של Admin SDK שמועבר לפונקציית Firebase JavaScript SDK getDatabase
יפיק את השגיאה הבאה:FirebaseApp
TypeError: Cannot read properties of undefined (reading 'getProvider')
at _getProvider
at getDatabase
זה נכון לגבי כל Firebase JavaScript SDK API surface, ולא רק לגבי Realtime Database.
הדבר נכון גם לגבי שימוש בכיוון ההפוך. כשמנסים להשתמש בסוג Cloud Firestore של JS SDK Timestamp
עם Firebase Admin SDK עבור Node.js, מתקבלות שגיאות דומות.
לא כדאי להשתמש בגרסאות סותרות של Firebase JavaScript SDK
אם מוגדרות כמה גרסאות סותרות של Firebase JavaScript SDK כתלויות בפרויקט, יתרחשו שגיאות בזמן הריצה כשמועברים מופעים של SDK בין חבילות SDK. לדוגמה, שימוש בספרייה Data Connect עם גרסה לא תואמת של FirebaseApp
גורם לשגיאה הבאה:
Error: Component data-connect has not been registered yet
הבעיה הזו נגרמת בדרך כלל בגלל עדכון של תלות באחד מחבילות Firebase SDK, אבל לא בכולן. המצב הזה קורה בדרך כלל כשכלי אוטומטי לעדכון תלויות משנה משנה קבוצת משנה של תלויות משנה של Firebase SDK בקובץ yarn.lock
או package-lock.json
של הפרויקט. מכיוון שערכות SDK רבות של Firebase JavaScript פועלות יחד, השימוש בגרסאות שונות של ערכות ה-SDK גורם לחוסר תאימות בזמן הריצה,
כדי לפתור את הבעיה, צריך למחוק את הספרייה node_modules
/ ואת yarn.lock
(עבור
yarn
) או package-lock.json
(עבור npm
) בפרויקט ולהתקין מחדש את התלות.
אם השגיאות נמשכות, אפשר להשתמש בפקודה npm ls כדי לבצע ניפוי באגים נוסף בבעיה. הפעולה הזו תרשום ביומן את התלות של הפרויקט, כדי שתוכלו לזהות גרסאות סותרות של מודול firebase
.
לדוגמה, ביומן הבא מוצג package-using-older-firebase
שמייבא גרסה מתנגשת של Firebase JavaScript SDK:
$ npm ls firebase --all
your-app@0.0.0
├── firebase@11.2.0
├─┬ @angular/fire@19.0.0
│ ├── firebase@11.2.0 deduped
│ └─┬ rxfire@6.1.0
│ └── firebase@10.14.1 deduped
└─┬ package-using-older-firebase@0.1.0
└─── firebase@10.14.1
יכול להיות ששגיאות יתרחשו גם בגלל שילוב של הצהרות CJS ו-ESM require
ו-import
באפליקציה. השילוב הזה יוצר כמה מופעים של Firebase JavaScript SDK, שכל אחד מהם שונה מהאחרים, ולכן הוא פוגע ביכולת הפעולה ההדדית של Firebase JavaScript SDK.
כדי לנפות באגים בתרחיש הזה, צריך להגדיל את רמת הפירוט של חבילת ה-bundler שבחרתם. לדוגמה, אפשר להשתמש בסימן esbuild analyze למטרה הזו.
מוודאים שקבצי ה-service worker נכללים בחבילה
קובצי Service Worker נבנים בדרך כלל מצינור נפרד משאר אפליקציית האינטרנט, והם לא נכללים בהגדרת ברירת המחדל של כלי חבילה כמו Webpack.
אם אתם משתמשים בגרסה המודולרית של Firebase JavaScript SDK ב-service worker, אתם צריכים לוודא שהגדרתם את כלי חבילת האפליקציה כך שיכלול את קובץ המקור של ה-service worker. בדוגמה הבאה נעשה שימוש ב-npx
כדי לארוז את ה-service worker של firebase-sw.js
בספרייה src
של הפרויקט:
npx esbuild ./src/firebase-sw.js --bundle --minify --main-fields=webworker,browser,module,main,default --outfile=public/firebase-sw.js
ההפעלה של קובץ service worker שלא נכלל בחבילה תיכשל אם הוא מייבא מודולים של ES שלא תומכים בקובצי service worker או קבצים שלא קיימים בהיקף של קובץ service worker. לפעמים הכשלים האלה לא מורגשים וקשה לאתר את מקור הבעיה.
במאמר שימוש בחבילות מודולים עם Firebase יש מידע נוסף על חבילת הגרסה המודולרית של Firebase JavaScript SDK באפליקציה.
לחלופין, אפשר לייבא את חבילות ה-SDK compat
Firebase JavaScript מ-CDN כדי שלא יהיה צורך בחבילות.
// Give the service worker access to Firebase Messaging.
// Replace 10.13.2 with the version of the Firebase JS SDK you're using
// in your app.
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-messaging-compat.js');
// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
firebase.initializeApp({
...
});
// Retrieve an instance of Firebase Messaging so that it can handle
// background messages.
const messaging = firebase.messaging();
שימוש ב-FirebaseServerApp
כשעובדים עם רינדור בצד השרת
ה-SDK Firebase JavaScript נועד במקור לפעול בסביבות דפדפן. ההשקה של מסגרות Server-Side Rendering (SSR) מאפשרת להשתמש ב-SDK בסביבות זמן ריצה חדשות. סביבות זמן הריצה האלה מספקות קבוצת משנה של כלים וממשקי API שדפדפני אינטרנט מספקים.
לדוגמה, חלק מערכות ה-SDK של Firebase דורשות אחסון במטמון של נתונים באמצעות IndexedDB, שהוא API שפועל רק בדפדפן. יכול להיות ש-Firebase Auth ידרוש אינטראקציה של המשתמש בתהליכי כניסה מסוימים, ואי אפשר לבצע אותה בסביבות שרת ללא ממשק גרפי. App Check מסתמך על היוריסטיקה של הדפדפן כדי לאמת את המשתמש לפני יצירת טוקנים של App Check.
כשעובדים עם ה-SDK בסביבות החדשות האלה, צריך להשתמש ב-FirebaseServerApp
, גרסה חדשה של FirebaseApp
שמספקת את האמצעים לטעינה מראש של מופע Firebase של SSR עם נתונים שנאספו בצד הלקוח.
הפונקציה FirebaseServerApp
תומכת בשני פרמטרים:
- טוקן מזהה של אימות: אם מסופק, Firebase Auth מבצע כניסה אוטומטית של משתמש שאומת בעבר, ויכול להיות שהסשן יתפרס על פני חלוקת ה-CSR/SSR.
- App Check Token: אם מספקים את הטוקן, ערכות SDK אחרות של Firebase משתמשות בו בלי צורך לאתחל מופע של לקוח App Check (שלא נתמך מחוץ לסביבות דפדפן). השינוי הזה מאפשר תמיכה ב-SSR במוצרים שבהם App Check מופעל, כמו Cloud Functions, Data Connect, Cloud Firestore, Realtime Database ו-Vertex AI.
דוגמה לשימוש ב-FirebaseServerApp
ב-Next.js מופיעה במאמר Streamline SSR app development with FirebaseServerApp.