Next.js'yi entegre etme

Firebase CLI'yi kullanarak Next.js web uygulamalarınızı Firebase'e dağıtabilir ve Firebase Hosting ile yayınlayabilirsiniz. CLI, Next.js ayarlarınıza saygı duyar ve bunları Firebase ayarlarına çevirir. Bu işlem için sizden sıfır veya minimum düzeyde ek yapılandırma gerekmez. Uygulamanız dinamik sunucu tarafı mantığı içeriyorsa KSA bu mantığı Cloud Functions for Firebase'e dağıtır. Desteklenen en son Next.js sürümü 13.4.7'dir.

Başlamadan önce

Uygulamanızı Firebase'e dağıtmaya başlamadan önce aşağıdaki koşulları ve seçenekleri inceleyin:

  • Firebase 12.1.0 veya daha yeni bir KSA sürümü. Tercih ettiğiniz yöntemi kullanarak CLI'yi yüklediğinizden emin olun.
  • İsteğe bağlı: Firebase projenizde faturalandırma etkinleştirilmiş olmalıdır (SSR'yi kullanmayı planlıyorsanız gereklidir).

  • İsteğe bağlı: Firebase'e uygun özelliklerinden yararlanmak için deneysel ReactFire kitaplığını kullanın

Firebase'i başlatma

Başlamak için çerçeve projenizde Firebase'i başlatın. Yeni bir proje için Firebase CLI'yi kullanın veya mevcut bir proje için firebase.json dosyasını değiştirin.

Yeni projeyi başlatma

  1. Firebase KSA'da web çerçevelerinin önizlemesini etkinleştirin:
    firebase experiments:enable webframeworks
  2. KSA'dan başlatma komutunu çalıştırın ve ardından talimatları uygulayın:

    firebase init hosting

  3. "Web çerçevesi kullanmak ister misiniz? (deneysel)"

  4. Barındırma kaynak dizininizi seçin. Mevcut bir Next.js uygulamasıysa CLI işlemi tamamlanır ve bir sonraki bölüme geçebilirsiniz.

  5. İstenirse Next.js'i seçin.

Statik içerik sunma

Firebase'i başlattıktan sonra standart dağıtım komutuyla statik içerik yayınlayabilirsiniz:

firebase deploy

Dağıtılan uygulamanızı canlı sitesinde görüntüleyebilirsiniz.

Dinamik içeriği önceden oluşturma

Firebase CLI, getStaticProps ve getStaticPaths işlevlerinin kullanımını algılar.

İsteğe bağlı: Firebase JS SDK'sı ile entegrasyon yapın

Firebase JS SDK yöntemlerini hem sunucu hem de istemci paketlerine dahil ederken ürünü kullanmadan önce isSupported() öğesini kontrol ederek çalışma zamanı hatalarından korunun. Bazı ürünler tüm ortamlarda desteklenmez.

İsteğe bağlı: Firebase Admin SDK ile entegrasyon

Yönetici SDK'sı paketleri, tarayıcı derlemenize dahil edilirse başarısız olur. Bu paketlere yalnızca getStaticProps ve getStaticPaths içinden başvurun.

Tamamen dinamik içerik yayınlama (SSR)

Firebase KSA, getServerSideProps işlevinin kullanımını algılar. Bu gibi durumlarda CLI, dinamik sunucu kodunu çalıştırmak için işlevleri Cloud Functions for Firebase'e dağıtır. Bu işlevlerle ilgili bilgileri (ör. alan ve çalışma zamanı yapılandırması) Firebase konsolunda görüntüleyebilirsiniz.

Hosting davranışını next.config.js ile yapılandırma

Resim Optimizasyonu

Next.js Resim Optimizasyonu'nun kullanılması desteklenir ancak SSR kullanmıyor olsanız bile bir işlevin oluşturulmasını tetikler (Cloud Functions for Firebase içinde).

Yönlendirmeler, yeniden yazmalar ve üstbilgiler

Firebase CLI, next.config.js'teki yönlendirmeleri, yeniden yazmaları ve üstbilgileri dikkate alır ve dağıtım sırasında bunları ilgili eşdeğer Firebase Hosting yapılandırmasına dönüştürür. Next.js yönlendirmesi, yeniden yazma veya başlık eşdeğer bir Firebase Hosting başlığına dönüştürülemiyorsa resim optimizasyonu veya SSR kullanmıyor olsanız bile yedek olarak bir işlev oluşturur.

İsteğe bağlı: Firebase Authentication ile entegrasyon

Web çerçevesi uyumlu Firebase dağıtım araçları, çerezleri kullanarak istemci ve sunucu durumunu otomatik olarak senkronize eder. SSR'de kimlik doğrulama bağlamına erişmek için bazı yöntemler sağlanır:

  • Express res.locals nesnesi isteğe bağlı olarak kimliği doğrulanmış bir Firebase uygulaması örneği (firebaseApp) ve şu anda oturum açmış kullanıcıyı (currentUser) içerir. Bu nesneye getServerSideProps üzerinden erişilebilir.
  • Kimliği doğrulanmış Firebase uygulamasının adı, rota sorgusunda (__firebaseAppName) sağlanır. Bu, bağlamda manuel entegrasyona olanak tanır:
// get the authenticated Firebase App
const firebaseApp = getApp(useRouter().query.__firebaseAppName);