📖 Scenario: You are building a simple web app that uses Firebase for authentication and Firestore database. To keep your app fast and small, you want to use Firebase's Modular SDK (v9+) which supports tree-shaking. This means you only import the parts of Firebase you actually use.
🎯 Goal: Create a Firebase app setup using the Modular SDK (v9+) with tree-shaking. You will initialize Firebase, configure authentication, and set up Firestore with minimal imports to keep the bundle size small.
📋 What You'll Learn
Use Modular SDK imports from 'firebase/app', 'firebase/auth', and 'firebase/firestore'
Initialize Firebase app with given config object
Create an auth instance using getAuth
Create a db instance using getFirestore
Avoid importing entire Firebase namespaces to enable tree-shaking
💡 Why This Matters
🌍 Real World
Using Firebase Modular SDK with tree-shaking is essential for building fast, efficient web apps that only load the code they need.
💼 Career
Many companies use Firebase for backend services. Knowing how to use the Modular SDK properly is a valuable skill for frontend and full-stack developers to optimize app performance.
Progress0 / 4 steps
1
Create Firebase configuration object
Create a constant called firebaseConfig with the exact keys and values: apiKey: 'AIzaSyA-1234567890abcdef', authDomain: 'myapp.firebaseapp.com', projectId: 'myapp', storageBucket: 'myapp.appspot.com', messagingSenderId: '1234567890', appId: '1:1234567890:web:abcdef123456'.
Firebase
Hint
Use const firebaseConfig = { ... } with the exact keys and values.
2
Import and initialize Firebase app
Import initializeApp from 'firebase/app'. Then create a constant called app by calling initializeApp(firebaseConfig).
Firebase
Hint
Use import { initializeApp } from 'firebase/app' and then const app = initializeApp(firebaseConfig).
3
Set up Firebase Authentication and Firestore
Import getAuth from 'firebase/auth' and getFirestore from 'firebase/firestore'. Create constants auth and db by calling getAuth(app) and getFirestore(app) respectively.
Firebase
Hint
Import getAuth and getFirestore and create auth and db using the app instance.
4
Export Firebase instances for use in app
Add export statements to export the constants app, auth, and db so they can be used in other parts of your app.
Firebase
Hint
Use export { app, auth, db } to make these available outside this module.
Practice
(1/5)
1. What is the main benefit of using Firebase Modular SDK (v9+) with tree-shaking?
easy
A. It reduces app size by including only needed Firebase features.
B. It automatically backs up your Firebase database.
C. It increases the number of Firebase services loaded by default.
D. It disables Firebase authentication for faster login.
Solution
Step 1: Understand tree-shaking purpose
Tree-shaking removes unused code to reduce app size and improve performance.
Step 2: Apply to Firebase Modular SDK
Using modular imports in Firebase v9+ allows only needed services to be included, enabling tree-shaking.
Final Answer:
It reduces app size by including only needed Firebase features. -> Option A
Quick Check:
Tree-shaking = smaller app size [OK]
Hint: Remember: modular imports keep only what you use [OK]
Common Mistakes:
Thinking tree-shaking adds features automatically
Confusing tree-shaking with backup or security
Assuming all Firebase services load by default
2. Which import statement correctly uses Firebase Modular SDK (v9+) for Firestore to enable tree-shaking?
easy
A. import { Firestore } from 'firebase/app';
B. import { getFirestore } from 'firebase/firestore';
C. import firebase from 'firebase';
D. import * as firestore from 'firebase/firestore';
Solution
Step 1: Identify modular import syntax
Firebase v9+ uses named imports from specific service packages like 'firebase/firestore'.
Step 2: Check each option
import { getFirestore } from 'firebase/firestore'; correctly imports getFirestore from 'firebase/firestore' for modular usage. Others use old or incorrect syntax.
Final Answer:
import { getFirestore } from 'firebase/firestore'; -> Option B
Quick Check:
Modular import = named import from service path [OK]
Hint: Use named imports from 'firebase/service' for modular SDK [OK]
Common Mistakes:
Using default import from 'firebase' package
Importing from 'firebase/app' instead of service path
Using wildcard imports that prevent tree-shaking
3. Given the code below, what will be the output in the console?
getAuth returns an Auth instance; currentUser is a property that is either null or a user object.
Step 2: Check typeof currentUser before login
Before login, currentUser is null, and typeof null is 'object' in JavaScript.
Final Answer:
'object' -> Option D
Quick Check:
typeof null = 'object' in JS [OK]
Hint: Remember: typeof null returns 'object' in JavaScript [OK]
Common Mistakes:
Assuming currentUser is undefined before login
Confusing typeof null with 'null' string
Thinking currentUser is a function
4. Identify the error in this Firebase Modular SDK (v9+) import code:
import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';
const app = initializeApp(config);
const db = getFirestore();
medium
A. getFirestore() requires the app instance as an argument.
B. initializeApp should be imported from 'firebase/firestore'.
C. config object is missing from the code.
D. getFirestore must be called before initializeApp.
Solution
Step 1: Check usage of initializeApp
initializeApp requires a config object to initialize Firebase app.
Step 2: Verify presence of config object
The code uses 'config' but does not define or import it, causing a ReferenceError.
Final Answer:
config object is missing from the code. -> Option C
Quick Check:
Missing config causes initialization error [OK]
Hint: Always define config before initializeApp call [OK]
Common Mistakes:
Forgetting to pass app to getFirestore (optional but recommended)
Importing initializeApp from wrong package
Calling getFirestore before app initialization
5. You want to optimize your Firebase app bundle size by importing only Authentication and Firestore services using Modular SDK (v9+). Which code snippet correctly achieves this with tree-shaking?
hard
A. import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/auth';
import { getFirestore } from 'firebase/firestore';
const app = initializeApp(config);
const auth = getAuth(app);
const db = getFirestore(app);
B. import firebase from 'firebase';
const app = firebase.initializeApp(config);
const auth = firebase.auth();
const db = firebase.firestore();
C. import { initializeApp, getAuth, getFirestore } from 'firebase/app';
const app = initializeApp(config);
const auth = getAuth(app);
const db = getFirestore(app);
D. import { initializeApp } from 'firebase/app';
import { auth, firestore } from 'firebase';
const app = initializeApp(config);
const authInstance = auth(app);
const dbInstance = firestore(app);
Solution
Step 1: Use modular imports from correct packages
Authentication and Firestore must be imported from 'firebase/auth' and 'firebase/firestore' respectively for tree-shaking.
Step 2: Initialize app and pass it to service getters
Initialize app with config, then pass app instance to getAuth and getFirestore functions.
Step 3: Check each option
import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/auth';
import { getFirestore } from 'firebase/firestore';
const app = initializeApp(config);
const auth = getAuth(app);
const db = getFirestore(app); correctly imports and initializes services modularly. Others use old syntax or wrong imports preventing tree-shaking.