En savoir plus sur le Web et Firebase

Lorsque vous développez une application Web à l'aide de Firebase, vous risquez de 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 orienter vers des ressources pour en savoir plus.

Si vous avez des questions sur un sujet non abordé sur cette page, visitez l'une de nos communautés en ligne . Nous mettrons également régulièrement à jour cette page avec de nouveaux sujets, alors revenez pour voir si nous avons ajouté le sujet sur lequel vous souhaitez en savoir plus.

Versions du SDK : avec espace de noms et modulaire

Firebase fournit deux surfaces d'API pour les applications Web :

  • JavaScript - espace de noms. Il s'agit de l'interface JavaScript que Firebase gère depuis de nombreuses années et qui est familière aux développeurs Web disposant d'anciennes applications Firebase. Étant donné que l’API avec espace de noms ne bénéficie pas de la prise en charge continue de nouvelles fonctionnalités, la plupart des nouvelles applications devraient plutôt adopter l’API modulaire.
  • JavaScript - modulaire . Ce SDK est basé sur une approche modulaire qui offre une taille de SDK réduite et une plus grande efficacité avec des outils de création JavaScript modernes tels que webpack ou Rollup .

L'API modulaire s'intègre bien aux outils de construction qui suppriment le code qui n'est pas utilisé dans votre application, un processus connu sous le nom de « tree-shaking ». Les applications créées avec ce SDK bénéficient d’encombrements considérablement réduits. L'API avec espace de noms, bien que disponible sous forme de module, n'a pas une structure strictement modulaire et n'offre 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. Généralement, 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 discrètes. Par exemple, le chaînage de points de l'API avec espace de noms, tel que firebaseApp.auth() , est remplacé dans l'API modulaire par une seule fonction getAuth() qui prend firebaseApp et renvoie une instance d'authentification.

Cela signifie que les applications Web créées avec l'API avec espace de noms nécessitent une refactorisation afin de tirer parti de la conception d'applications modulaires. Consultez le guide de mise à niveau pour plus de détails.

JavaScript - API modulaire pour les nouvelles applications

Si vous démarrez une nouvelle intégration avec Firebase, vous pouvez opter pour 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 comme premier argument et la fonction utilise ensuite les détails du service pour faire le reste. Par exemple:

import { getAuth, onAuthStateChanged } from "firebase/auth";

const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
  // Check for user status
});

Pour plus d'exemples et de détails, consultez les guides de chaque domaine de produit ainsi que la documentation de référence de l'API modulaire .

Façons d'ajouter les SDK Web à votre application

Firebase fournit des bibliothèques JavaScript pour la plupart des produits Firebase, notamment Remote Config, FCM, etc. La manière dont vous ajoutez des SDK Firebase à votre application Web dépend des outils que vous utilisez avec votre application (comme un regroupeur de modules).

Vous pouvez ajouter n'importe laquelle des bibliothèques disponibles à votre application via l'une des méthodes prises en charge :

  • npm (pour les bundlers de modules)
  • CDN (réseau de diffusion de contenu)

Pour obtenir des instructions de configuration détaillées, consultez 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 Firebase npm (qui comprend à la fois les bundles navigateur et Node.js) vous fournit une copie locale du SDK Firebase, qui peut être nécessaire pour les applications non-navigateurs telles que les applications Node.js, React Native ou Electron. Le téléchargement inclut les bundles Node.js et React Native en option pour certains packages. Les bundles Node.js sont nécessaires pour l'étape de rendu côté serveur (SSR) des frameworks SSR.

L'utilisation de npm avec un bundler de modules tel que webpack ou Rollup fournit des options d'optimisation pour « secouer l'arbre » du code inutilisé et appliquer des polyfills ciblés, ce qui peut réduire considérablement l'empreinte de votre application. La mise en œuvre de ces fonctionnalités peut ajouter une certaine complexité à votre configuration et à votre chaîne de construction, mais divers outils CLI grand public peuvent aider à atténuer ce problème. Ces outils incluent Angular , React , Vue , Next et autres.

En résumé:

  • Fournit une optimisation précieuse de la taille de l’application
  • Des outils robustes sont disponibles pour gérer les modules
  • Requis pour 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 simple du SDK 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 build, et votre chaîne de build peut avoir tendance à être plus simple et plus facile à utiliser par rapport aux bundlers de modules. Si vous n'êtes pas particulièrement préoccupé par la taille installée de votre application et n'avez pas d'exigences particulières telles que la transpilation à partir de TypeScript, alors CDN pourrait être un bon choix.

En résumé:

  • Familier et simple
  • Convient lorsque la taille de l'application n'est pas une préoccupation majeure
  • Convient lorsque votre site Web n'utilise pas d'outils de création.

Variantes du SDK Web Firebase

Le SDK Web de Firebase peut être utilisé à la fois dans les applications de navigateur et de nœud. Cependant, plusieurs produits ne sont pas disponibles dans les environnements Node. Consultez la liste des environnements pris en charge .

Certains SDK de produits fournissent des variantes de navigateur et de nœud distinctes, chacune étant fournie aux formats ESM et CJS, et certains SDK de produits fournissent même des variantes Cordova ou React Native. Le SDK Web est configuré pour fournir la variante correcte en fonction de la configuration de vos outils ou de votre environnement et ne devrait pas nécessiter de sélection manuelle dans la plupart des cas. Toutes les variantes du SDK sont conçues pour aider à créer des applications Web ou des applications clientes accessibles aux utilisateurs finaux, par exemple dans un bureau Node.js ou une application IoT. Si votre objectif est de configurer un accès administratif à partir d'environnements privilégiés (tels que des serveurs), utilisez plutôt le SDK Firebase Admin .

Détection d'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 adaptés à votre application.

Si votre code utilise les instructions require de 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 type de bundle approprié 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 et appID . 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.

  • Si vous avez activé Google Analytics dans votre projet Firebase, votre objet de configuration contient le champ measurementId . Apprenez-en davantage sur ce champ sur la page de démarrage d'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 et databaseURL , 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 automatiquement renseignées) :

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

Options de configuration supplémentaires

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 API CDN 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 :

  1. Ajoutez un indicateur defer à chaque balise script 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>
    
  2. Créez un fichier init-firebase.js , puis incluez les éléments suivants dans le fichier :

    // TODO: Replace the following with your app's Firebase project configuration
    var firebaseConfig = {
      // ...
    };
    
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);
    

Utiliser plusieurs projets Firebase dans une seule application

Dans la plupart des cas, il vous suffit d'initialiser Firebase dans une seule application par défaut. Vous pouvez accéder à Firebase à partir de cette application de deux manières équivalentes :

Web modular API

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 namespaced API

// 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();

Parfois, cependant, vous devez accéder à plusieurs projets Firebase en même temps. Par exemple, vous souhaiterez peut-être lire les données de la base de données d'un projet Firebase mais stocker les fichiers dans un autre projet Firebase. Ou vous souhaiterez peut-être authentifier un projet tout en gardant un deuxième projet non authentifié.

Le SDK JavaScript Firebase vous permet d'initialiser et d'utiliser plusieurs projets Firebase dans une seule application en même temps, chaque projet utilisant ses propres informations de configuration Firebase.

Web modular API

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 namespaced API

// 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 nécessitent que vous diffusiez votre application Web à partir d'un serveur plutôt qu'à partir 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 Firebase CLI, un outil de ligne de commande.

  1. Consultez la documentation Firebase CLI pour savoir comment installer la CLI ou mettre à jour vers sa dernière version .

  2. Initialisez votre projet Firebase. Exécutez la commande suivante à partir de la racine du répertoire de votre application locale :

    firebase init

  3. Démarrez le serveur local pour le développement. Exécutez la commande suivante à partir de la racine du répertoire de votre application locale :

    firebase serve

Ressources Open Source pour les SDK JavaScript Firebase

Firebase prend en charge 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 référentiel public Firebase GitHub .

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. Retrouvez ces démarrages rapides dans notre référentiel de démarrage rapide public Firebase GitHub . Vous pouvez utiliser ces démarrages rapides comme exemple de code pour utiliser les SDK Firebase.