Intégrer Next.js

À l'aide de Firebase CLI, vous pouvez déployer vos applications Web Next.js sur Firebase et les servir avec Firebase Hosting. La CLI respecte vos paramètres Next.js et les traduit en paramètres Firebase avec zéro ou une configuration supplémentaire minimale de votre part. Si votre application inclut une logique dynamique côté serveur, la CLI déploie cette logique sur Cloud Functions pour Firebase. La dernière version de Next.js prise en charge est la 13.4.7.

Avant que tu commences

Avant de commencer à déployer votre application sur Firebase, passez en revue les exigences et options suivantes :

  • Firebase CLI version 12.1.0 ou ultérieure. Assurez-vous d' installer la CLI en utilisant votre méthode préférée.
  • Facultatif : facturation activée sur votre projet Firebase (obligatoire si vous prévoyez d'utiliser SSR)

  • Facultatif : utilisez la bibliothèque expérimentale ReactFire pour bénéficier de ses fonctionnalités compatibles avec Firebase

Initialiser Firebase

Pour commencer, initialisez Firebase pour votre projet de framework. Utilisez la CLI Firebase pour un nouveau projet ou modifiez firebase.json pour un projet existant.

Initialiser un nouveau projet

  1. Dans la CLI Firebase, activez l'aperçu des frameworks Web :
    firebase experiments:enable webframeworks
  2. Exécutez la commande d'initialisation à partir de la CLI, puis suivez les invites :

    firebase init hosting

  3. Répondez oui à la question "Voulez-vous utiliser un framework web ? (expérimental)"

  4. Choisissez votre répertoire source d'hébergement. S'il s'agit d'une application Next.js existante, le processus CLI se termine et vous pouvez passer à la section suivante.

  5. Si vous y êtes invité, choisissez Next.js.

Servir du contenu statique

Après avoir initialisé Firebase, vous pouvez diffuser du contenu statique avec la commande de déploiement standard :

firebase deploy

Vous pouvez afficher votre application déployée sur son site en direct.

Pré-rendu du contenu dynamique

La CLI Firebase détectera l'utilisation de getStaticProps et getStaticPaths .

Facultatif : intégration avec le SDK Firebase JS

Lorsque vous incluez les méthodes du SDK Firebase JS dans les bundles serveur et client, protégez-vous contre les erreurs d'exécution en vérifiant isSupported() avant d'utiliser le produit. Tous les produits ne sont pas pris en charge dans tous les environnements .

Facultatif : intégration avec le SDK d'administration Firebase

Les bundles du SDK d'administration échoueront s'ils sont inclus dans la version de votre navigateur ; faites-y référence uniquement dans getStaticProps et getStaticPaths .

Servir du contenu entièrement dynamique (SSR)

La CLI Firebase détectera l'utilisation de getServerSideProps . Dans de tels cas, la CLI déploiera des fonctions sur Cloud Functions pour Firebase afin d'exécuter le code du serveur dynamique. Vous pouvez afficher des informations sur ces fonctions, telles que leur configuration de domaine et d'exécution, dans la console Firebase .

Configurer le comportement d'hébergement avec next.config.js

Optimisation des images

L'utilisation de Next.js Image Optimization est prise en charge, mais elle déclenchera la création d'une fonction (dans Cloud Functions pour Firebase ), même si vous n'utilisez pas SSR.

Redirections, réécritures et en-têtes

La CLI Firebase respecte les redirections , les réécritures et les en-têtes dans next.config.js , en les convertissant dans leur configuration d'hébergement Firebase équivalente respective au moment du déploiement. Si une redirection, une réécriture ou un en-tête Next.js ne peut pas être converti en un en-tête Firebase Hosting équivalent, il revient et crée une fonction, même si vous n'utilisez pas l'optimisation d'image ou SSR.

Facultatif : intégration avec l'authentification Firebase

L'outil de déploiement Firebase compatible avec le framework Web maintiendra automatiquement l'état du client et du serveur synchronisé à l'aide de cookies. Certaines méthodes sont proposées pour accéder au contexte d'authentification dans SSR :

  • L'objet Express res.locals contiendra éventuellement une instance d'application Firebase authentifiée ( firebaseApp ) et l'utilisateur actuellement connecté ( currentUser ). Ceci est accessible dans getServerSideProps .
  • Le nom de l'application Firebase authentifiée est fourni sur la requête de route ( __firebaseAppName ). Cela permet une intégration manuelle dans le contexte :
// get the authenticated Firebase App
const firebaseApp = getApp(useRouter().query.__firebaseAppName);