gatsby-plugin-reactfire

FirebaseAppProvider component from reactfire as a Gatsby plugin.

🤷‍♂️ Why?

I needed to set up a FirebaseAppProvider inside another plugin’s Context Provider. Making this into a plugin allows me to easily order them in gatsby-config.js.

💻 Install

This plugin uses firebase and reactfire, make sure to install those too.

yarn add firebase reactfire gatsby-plugin-reactfire

⚙ Configure

Add the plugin to your gatsby-config.js as usual, and pass the firebaseConfig object from your Firebase project’s settings at the plugin’s options.

For example:

// ...
plugins: [
  {
    resolve: `gatsby-plugin-reactfire`,
    options: {
      firebaseConfig: {
        apiKey: "API_KEY",
        authDomain: "PROJECT_ID.firebaseapp.com",
        projectId: "PROJECT_ID",
        storageBucket: "PROJECT_ID.appspot.com",
        messagingSenderId: "SENDER_ID",
        appId: "APP_ID",
        measurementId: "G-MEASUREMENT_ID",
      },
    },
  },
  // `gatsby-plugin-something-else`,
]
// ...

That’s it!

Now you can use any of the hooks and components from reactfire in your site pages and components.

👥 Shadowing

This plugin sets up a very basic FirebaseAppProvider, no Suspense or anything. It’s literally this:

import React from "react"
import { FirebaseAppProvider } from "reactfire"

export const wrapRootElement = ({ element }, { firebaseConfig }) => {
  if (typeof window === "undefined") return <p>Loading...</p>
  return (
    <FirebaseAppProvider firebaseConfig={firebaseConfig}>
      {element}
    </FirebaseAppProvider>
  )
}

You can shadow a src/gatsby-plugin-reactfire/provider.js and write your own.