מדריך צעד-אחר-צעד להתקנה והגדרה של Firebase בפרויקט Next.js 16.
בשמחה! שילוב Firebase ב-Next.js 16 הוא תהליך יחסית פשוט, אך חשוב לבצע אותו בצורה מסודרת כדי להתמודד נכון עם ה-App Router וניהול משתני סביבה.
הנה מדריך צעד-אחר-צעד להתקנה והגדרה של Firebase בפרויקט Next.js 16.
שלב 1: יצירת פרויקט ב-Firebase Console
לפני שניגשים לקוד, עלינו להכין את התשתית בענן.
- היכנס ל-Firebase Console.
- לחץ על Create a project ועקוב אחר ההוראות (תן שם לפרויקט, בחר אם להפעיל Google Analytics וכו').
- לאחר שהפרויקט מוכן, לחץ על האייקון של Web (
</>) כדי להוסיף אפליקציה חדשה. - תן כינוי לאפליקציה ולחץ על Register app.
- כעת תוצג לך קוביית קוד עם ה-
firebaseConfig. אל תעתיק אותה עדיין לקוד, אלא שמור את הנתונים בצד. אנחנו נשתמש בהם במשתני סביבה.
שלב 2: התקנת החבילה
בטרמינל של הפרויקט שלך ב-Next.js, הרץ את הפקודה הבאה להתקנת ה-SDK של Firebase:
npm install firebase
# או
yarn add firebase
# או
pnpm add firebase
שלב 3: הגדרת משתני סביבה (Environment Variables)
כדי לשמור על אבטחה וסדר, לא נדביק את המפתחות ישירות בקוד. צור קובץ בשם .env.local בשורש הפרויקט שלך (באותה תיקייה כמו package.json).
הדבק שם את הנתונים משלב 1, אך הוסף להם את הקידומת NEXT_PUBLIC_ כדי שהם יהיו זמינים לצד הלקוח (Client Side), שכן Firebase Client SDK רץ בדפדפן.
# .env.local
NEXT_PUBLIC_FIREBASE_API_KEY=AIzaSyD...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.firebasestorage.app
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=123456789
NEXT_PUBLIC_FIREBASE_APP_ID=1:123456:web:abcdef
שלב 4: אתחול Firebase (יצירת קובץ Config)
ב-Next.js 16 מומלץ לשמור קבצי עזר בתיקיית lib או utils.
צור קובץ בשם lib/firebase.js (או firebase.ts אם אתה משתמש ב-TypeScript).
קובץ זה יבטיח שאנחנו מאתחלים את האפליקציה רק פעם אחת (חשוב מאוד ב-Next.js כדי למנוע שגיאות בזמן פיתוח בגלל Hot Reloading).
// lib/firebase.ts
import { initializeApp, getApps, getApp } from "firebase/app";
import { getAuth } from "firebase/auth";
import { getFirestore } from "firebase/firestore";
// import { getStorage } from "firebase/storage"; // אם צריך אחסון קבצים
const firebaseConfig = {
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
};
// Singleton Pattern: בדיקה האם האפליקציה כבר אותחלה
const app = getApps().length > 0 ? getApp() : initializeApp(firebaseConfig);
// ייצוא השירותים לשימוש בשאר האפליקציה
const auth = getAuth(app);
const db = getFirestore(app);
// const storage = getStorage(app);
export { app, auth, db };
שלב 5: דוגמה לשימוש (Read Data)
ב-Next.js 16 עובדים עם Server Components כברירת מחדל, אך ה-SDK הרגיל של Firebase (firebase/firestore) מותאם בעיקר ל-Client. עם זאת, ניתן להשתמש בו בתוך קומפוננטות Client או להשתמש ב-Firebase Admin SDK לריצה בצד השרת (נושא מתקדם יותר).
הנה דוגמה בסיסית לשליפת מידע ב-Client Component (למשל, רשימת מוצרים):
// app/components/ProductList.tsx
'use client'; // חובה כי אנחנו משתמשים ב-Hooks
import { useEffect, useState } from 'react';
import { db } from '@/lib/firebase'; // הייבוא מהקובץ שיצרנו
import { collection, getDocs } from 'firebase/firestore';
export default function ProductList() {
const [products, setProducts] = useState<any[]>([]);
useEffect(() => {
const fetchData = async () => {
try {
const querySnapshot = await getDocs(collection(db, "products"));
const productsData = querySnapshot.docs.map(doc => ({
id: doc.id,
...doc.data()
}));
setProducts(productsData);
} catch (error) {
console.error("Error fetching data:", error);
}
};
fetchData();
}, []);
return (
<div>
<h2>רשימת מוצרים מ-Firestore:</h2>
<ul>
{products.map((item) => (
<li key={item.id}>{item.name}</li>
))}
</ul>
</div>
);
}
טיפים חשובים ל-Next.js 16
- 'use client': כל קומפוננטה שמשתמשת ב-
useEffect,useStateאו פונקציות Auth של Firebase (כמוonAuthStateChanged), חייבת להתחיל בהוראה'use client'בראש הקובץ. - Firebase Admin SDK: אם אתה רוצה לשלוף מידע בתוך Server Component (ללא
useEffectועם ביצועים טובים יותר ל-SEO), תצטרך להשתמש בחבילהfirebase-admin. זה דורש סט אפ נפרד עם מפתחות Service Account. - אבטחה: וודא שב-Firebase Console בלשונית Firestore Database -> Rules הכללים שלך מאובטחים ולא פתוחים לכולם (
allow read, write: if true;זה מסוכן לייצור).
