Lorsque vous développez une application Web à l'aide de Firebase, vous pouvez rencontrer des concepts inconnus ou des domaines dans lesquels vous avez besoin de plus d'informations pour prendre les bonnes décisions pour votre projet. Cette page vise à répondre à ces questions ou à vous diriger vers des ressources pour en savoir plus.
Si vous avez des questions sur un sujet qui n'est pas abordé sur cette page, consultez l'une de nos communautés en ligne. Nous ajouterons régulièrement de nouveaux sujets à cette page. N'hésitez donc pas à revenir pour voir si nous avons ajouté le sujet qui vous intéresse.
Versions du SDK: avec un espace de noms et modulaires
Firebase fournit deux surfaces d'API pour les applications Web :
- JavaScript : avec un espace de noms. Il s'agit de l'interface JavaScript que Firebase a gérée pendant de nombreuses années et qui est familière aux développeurs Web qui utilisent d'anciennes applications Firebase. Étant donné que l'API avec espace de noms ne bénéficie pas d'une prise en charge continue des nouvelles fonctionnalités, la plupart des nouvelles applications doivent adopter l'API modulaire.
- JavaScript : modulaire Ce SDK repose sur une approche modulaire qui réduit la taille du SDK et améliore l'efficacité avec les outils de compilation JavaScript modernes tels que webpack ou Rollup.
L'API modulaire s'intègre bien aux outils de compilation qui éliminent le code qui n'est pas utilisé dans votre application, un processus appelé "tree-shaking". Les applications créées avec ce SDK bénéficient d'une empreinte de taille considérablement réduite. L'API avec espace de noms, bien que disponible en tant que module, n'a pas une structure strictement modulaire et ne fournit pas le même degré de réduction de taille.
Bien que la majorité de l'API modulaire suive les mêmes modèles que l'API avec espace de noms, l'organisation du code est différente. En général, l'API avec espace de noms est orientée vers un modèle d'espace de noms et de service, tandis que l'API modulaire est orientée vers des fonctions distinctes. Par exemple, la chaîne de points de l'API associée à un espace de noms, comme firebaseApp.auth()
, est remplacée dans l'API modulaire par une seule fonction getAuth()
qui prend firebaseApp
et renvoie une instance Authentication.
Cela signifie que les applications Web créées avec l'API avec espace de noms doivent être refactorisées pour tirer parti de la conception modulaire des applications. Pour en savoir plus, consultez le guide de mise à niveau.
JavaScript : API modulaire pour les nouvelles applications
Si vous commencez une nouvelle intégration avec Firebase, vous pouvez activer l'API modulaire lorsque vous ajoutez et initialisez le SDK.
Lorsque vous développez votre application, gardez à l'esprit que votre code sera principalement organisé autour de fonctions. Dans l'API modulaire, les services sont transmis en tant que premier argument, et la fonction utilise ensuite les détails du service pour effectuer le reste. Exemple :
import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
// Check for user status
});
Pour en savoir plus et obtenir d'autres exemples, consultez les guides de chaque domaine de produits, ainsi que la documentation de référence de l'API modulaire.
Méthodes d'ajout des SDK Web à votre application
Firebase fournit des bibliothèques JavaScript pour la plupart des produits Firebase, y compris Remote Config, FCM et plus encore. La manière dont vous ajoutez les SDK Firebase à votre application Web dépend des outils que vous utilisez avec votre application (comme un bundleur de modules).
Vous pouvez ajouter l'une des bibliothèques disponibles à votre application via l'une des méthodes compatibles:
- npm (pour les outils de regroupement de modules)
- CDN (réseau de diffusion de contenu)
Pour obtenir des instructions de configuration détaillées, consultez la section Ajouter Firebase à votre application JavaScript. Le reste de cette section contient des informations pour vous aider à choisir parmi les options disponibles.
npm
Le téléchargement du package npm Firebase (qui inclut à la fois des bundles de navigateur et de Node.js) vous fournit une copie locale du SDK Firebase, qui peut être nécessaire pour les applications autres que les navigateurs, telles que les applications Node.js, React Native ou Electron. Le téléchargement inclut des bundles Node.js et React Native en option pour certains packages. Les bundles Node.js sont nécessaires à l'étape de rendu côté serveur (SSR) des frameworks SSR.
L'utilisation de npm avec un outil de regroupement de modules tel que webpack ou Rollup fournit des options d'optimisation pour "élaguer" le code inutilisé et appliquer des polyfills ciblés, ce qui peut considérablement réduire l'empreinte de votre application. L'implémentation de ces fonctionnalités peut ajouter de la complexité à votre configuration et à votre chaîne de compilation, mais divers outils de CLI courants peuvent aider à atténuer ce problème. Parmi ces outils, citons Angular, React, Vue, Next, etc.
En résumé :
- Fournit une optimisation de la taille de l'application intéressante
- Des outils robustes sont disponibles pour gérer les modules.
- Obligatoire pour le SSR avec Node.js
CDN (réseau de diffusion de contenu)
L'ajout de bibliothèques stockées sur le CDN de Firebase est une méthode de configuration du SDK simple qui peut être familière à de nombreux développeurs. En utilisant le CDN pour ajouter les SDK, vous n'aurez pas besoin d'un outil de compilation, et votre chaîne de compilation peut être plus simple et plus facile à utiliser que les outils de regroupement de modules. Si vous n'êtes pas particulièrement préoccupé par la taille installée de votre application et que vous n'avez pas d'exigences particulières telles que la transcompilation à partir de TypeScript, un CDN peut être un bon choix.
En résumé :
- Simple et familier
- Convient lorsque la taille de l'application n'est pas un problème majeur
- À utiliser lorsque votre site Web n'utilise pas d'outils de compilation.
Variantes du SDK Web Firebase
Le SDK Web de Firebase peut être utilisé à la fois dans les applications de navigateur et de nœud. Toutefois, plusieurs produits ne sont pas disponibles dans les environnements Node. Consultez la liste des environnements compatibles.
Certains SDK de produits fournissent des variantes de navigateur et de nœud distinctes, chacune étant fournie aux formats ESM et CJS. Certains SDK de produits fournissent même des variantes Cordova ou React Native. Le SDK Web est configuré pour fournir la variante appropriée en fonction de votre configuration d'outils ou de votre environnement. Dans la plupart des cas, il ne devrait pas nécessiter de sélection manuelle. Toutes les variantes de SDK sont conçues pour vous aider à créer des applications Web ou des applications clientes pour l'accès des utilisateurs finaux, par exemple dans une application IoT ou de bureau Node.js. Si votre objectif est de configurer un accès administrateur à partir d'environnements privilégiés (tels que des serveurs), utilisez plutôt Firebase Admin SDK.
Détection de l'environnement avec des bundlers et des frameworks
Lorsque vous installez le SDK Web Firebase à l'aide de npm, les versions JavaScript et Node.js sont toutes deux installées. Le package fournit une détection détaillée de l'environnement pour activer les bundles appropriés pour votre application.
Si votre code utilise des instructions require
Node.js, le SDK recherche le bundle spécifique à Node. Sinon, les paramètres de votre bundler doivent être correctement calculés pour détecter le bon champ de point d'entrée dans votre fichier package.json
(par exemple, main
, browser
ou module
). Si vous rencontrez des erreurs d'exécution avec le SDK, vérifiez que votre bundler est configuré pour donner la priorité au bon type de bundle pour votre environnement.
En savoir plus sur l'objet de configuration Firebase
Pour initialiser Firebase dans votre application, vous devez fournir la configuration du projet Firebase de votre application. Vous pouvez obtenir votre objet de configuration Firebase à tout moment.
Nous vous déconseillons de modifier manuellement votre objet de configuration, en particulier les "options Firebase" requises suivantes :
apiKey
,projectId
etappID
. Si vous initialisez votre application avec des valeurs non valides ou manquantes pour ces "options Firebase" requises, les utilisateurs de votre application peuvent rencontrer de graves problèmes. L'exception concerneauthDomain
, qui peut être mis à jour conformément aux bonnes pratiques d'utilisation de signInWithRedirect.Si vous avez activé Google Analytics dans votre projet Firebase, votre objet de configuration contient le champ
measurementId
. Pour en savoir plus sur ce champ, consultez la page de démarrage de Analytics.Si vous activez Google Analytics ou Realtime Database après avoir créé votre application Web Firebase, assurez-vous que l'objet de configuration Firebase que vous utilisez dans votre application est mis à jour avec les valeurs de configuration associées (
measurementId
etdatabaseURL
, respectivement). Vous pouvez obtenir votre objet de configuration Firebase à tout moment.
Voici le format d'un objet de configuration avec tous les services activés (ces valeurs sont renseignées automatiquement) :
var firebaseConfig = { apiKey: "API_KEY", authDomain: "PROJECT_ID.firebaseapp.com", // The value of `databaseURL` depends on the location of the database databaseURL: "https://DATABASE_NAME.firebaseio.com", projectId: "PROJECT_ID", storageBucket: "PROJECT_ID.appspot.com", messagingSenderId: "SENDER_ID", appId: "APP_ID", // For Firebase JavaScript SDK v7.20.0 and later, `measurementId` is an optional field measurementId: "G-MEASUREMENT_ID", };
Bibliothèques disponibles
Autres options de configuration
Retarder le chargement des SDK Firebase (à partir du CDN)
Vous pouvez retarder l'inclusion des SDK Firebase jusqu'à ce que la page entière soit chargée. Si vous utilisez des scripts CDN d'API modulaires avec <script type="module">
, il s'agit du comportement par défaut. Si vous utilisez des scripts CDN avec espace de noms en tant que module, procédez comme suit pour différer le chargement:
Ajoutez un indicateur
defer
à chaque balisescript
pour les SDK Firebase, puis différez l'initialisation de Firebase à l'aide d'un deuxième script, par exemple:<script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script> <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script> <script defer src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script> // ... <script defer src="./init-firebase.js"></script>
Créez un fichier
init-firebase.js
, puis incluez-y les éléments suivants :// TODO: Replace the following with your app's Firebase project configuration var firebaseConfig = { // ... }; // Initialize Firebase firebase.initializeApp(firebaseConfig);
Utiliser plusieurs projets Firebase dans une même application
Dans la plupart des cas, vous n'avez qu'à initialiser Firebase dans une seule application par défaut. Vous pouvez accéder à Firebase à partir de cette application de deux manières équivalentes :
Web
import { initializeApp } from "firebase/app"; import { getStorage } from "firebase/storage"; import { getFirestore } from "firebase/firestore"; // Initialize Firebase with a "default" Firebase project const defaultProject = initializeApp(firebaseConfig); console.log(defaultProject.name); // "[DEFAULT]" // Option 1: Access Firebase services via the defaultProject variable let defaultStorage = getStorage(defaultProject); let defaultFirestore = getFirestore(defaultProject); // Option 2: Access Firebase services using shorthand notation defaultStorage = getStorage(); defaultFirestore = getFirestore();
Web
// Initialize Firebase with a "default" Firebase project const defaultProject = firebase.initializeApp(firebaseConfig); console.log(defaultProject.name); // "[DEFAULT]" // Option 1: Access Firebase services via the defaultProject variable let defaultStorage = defaultProject.storage(); let defaultFirestore = defaultProject.firestore(); // Option 2: Access Firebase services using shorthand notation defaultStorage = firebase.storage(); defaultFirestore = firebase.firestore();
Cependant, il est parfois nécessaire d'accéder à plusieurs projets Firebase en même temps. Par exemple, vous pouvez souhaiter lire des données à partir de la base de données d'un projet Firebase, mais stocker des fichiers dans un autre projet Firebase. Vous pouvez également authentifier un projet tout en laissant un autre non authentifié.
Le SDK JavaScript Firebase vous permet d'initialiser et d'utiliser plusieurs projets Firebase dans une même application en même temps, chaque projet utilisant ses propres informations de configuration Firebase.
Web
import { initializeApp, getApp } from "firebase/app"; import { getStorage } from "firebase/storage"; import { getFirestore } from "firebase/firestore"; // Initialize Firebase with a default Firebase project initializeApp(firebaseConfig); // Initialize Firebase with a second Firebase project const otherProject = initializeApp(otherProjectFirebaseConfig, "other"); console.log(getApp().name); // "[DEFAULT]" console.log(otherProject.name); // "otherProject" // Use the shorthand notation to access the default project's Firebase services const defaultStorage = getStorage(); const defaultFirestore = getFirestore(); // Use the otherProject variable to access the second project's Firebase services const otherStorage = getStorage(otherProject); const otherFirestore = getFirestore(otherProject);
Web
// Initialize Firebase with a default Firebase project firebase.initializeApp(firebaseConfig); // Initialize Firebase with a second Firebase project const otherProject = firebase.initializeApp(otherProjectFirebaseConfig, "other"); console.log(firebase.app().name); // "[DEFAULT]" console.log(otherProject.name); // "otherProject" // Use the shorthand notation to access the default project's Firebase services const defaultStorage = firebase.storage(); const defaultFirestore = firebase.firestore(); // Use the otherProject variable to access the second project's Firebase services const otherStorage = otherProject.storage(); const otherFirestore = otherProject.firestore();
Exécuter un serveur Web local pour le développement
Si vous créez une application Web, certaines parties du SDK JavaScript Firebase exigent que vous la diffusiez à partir d'un serveur plutôt que du système de fichiers local. Vous pouvez utiliser la CLI Firebase pour exécuter un serveur local.
Si vous avez déjà configuré Firebase Hosting pour votre application, vous avez peut-être déjà effectué plusieurs des étapes ci-dessous.
Pour diffuser votre application Web, vous utiliserez la CLI Firebase, un outil de ligne de commande.
Consultez la documentation de la CLI Firebase pour découvrir comment installer la CLI ou passer à sa dernière version.
Initialisez votre projet Firebase. Exécutez la commande suivante à partir de la racine de votre répertoire d'application local :
firebase init
Démarrez le serveur local pour le développement. Exécutez la commande suivante à partir de la racine de votre répertoire d'application local :
firebase serve
Ressources Open Source pour les SDK JavaScript Firebase
Firebase est compatible avec le développement Open Source, et nous encourageons les contributions et les commentaires de la communauté.
SDK JavaScript Firebase
La plupart des SDK JavaScript Firebase sont développés en tant que bibliothèques Open Source dans notre dépôt GitHub Firebase public.
Exemples de démarrage rapide
Firebase gère une collection d'exemples de démarrage rapide pour la plupart des API Firebase sur le Web. Vous trouverez ces guides de démarrage rapide dans notre dépôt public de guides de démarrage rapide GitHub Firebase. Vous pouvez utiliser ces guides de démarrage rapide comme exemples de code pour utiliser les SDK Firebase.