Skip to content

added the emulator functionality for local development#105

Open
Nirvanjha2004 wants to merge 1 commit intoruxailab:mainfrom
Nirvanjha2004:added-the-emulator-func-for-local-dev
Open

added the emulator functionality for local development#105
Nirvanjha2004 wants to merge 1 commit intoruxailab:mainfrom
Nirvanjha2004:added-the-emulator-func-for-local-dev

Conversation

@Nirvanjha2004
Copy link
Contributor

🔧 Pull Request: Fix Firebase Firestore Emulator Connection

PR Summary

This PR fixes Firebase Firestore connection issues that prevented calibration data from being saved during development. The changes ensure proper emulator connectivity when VUE_APP_USE_EMULATORS=true.

Problem Statement

  • Application was failing to save calibration data with firebase.firestore is not a function error
  • Despite VUE_APP_USE_EMULATORS=true, the app was connecting to production Firebase
  • Users experienced permission denied errors when trying to save calibration results

Solution Overview

This PR implements a complete Firebase emulator setup for local development:

  1. Added missing Firestore service imports
  2. Configured Firestore emulator in firebase.json
  3. Implemented environment-aware emulator connection
  4. Added proper error handling and logging

Changes Made

📁 src/main.js

 import firebase from 'firebase/app'
+import 'firebase/firestore'

 // Initialize Firebase
 firebase.initializeApp(firebaseConfig);

+// Connect to Firestore emulator if in development
+if (process.env.VUE_APP_USE_EMULATORS === 'true') {
+  const db = firebase.firestore();
+  db.useEmulator('localhost', 8081);
+  console.log('🔥 Connected to Firestore emulator on localhost:8081');
+}

📁 src/store/calibration.js

 import axios from "axios";
 import firebase from "firebase/app";
+import "firebase/firestore";
 import router from "@/router";

📁 firebase.json

 {
   "emulators": {
+    "firestore": {
+      "port": 8081
+    },
     "hosting": {
       "port": 8000
     },
     "ui": {
-      "enabled": true
+      "enabled": false
     }
   }
 }

Technical Details

Why These Changes Were Needed

  1. Modular Firebase Architecture: Firebase v8+ requires explicit service imports for tree-shaking
  2. Emulator Configuration: Firebase CLI needs explicit emulator configuration to start services
  3. Runtime Connection: The SDK doesn't automatically connect to emulators without explicit configuration

Port Selection

  • Port 8081: Chosen for Firestore emulator (8080 was in use)
  • Port 8000: Maintained for hosting emulator
  • UI Disabled: Resolved port conflicts during development

Environment Handling

// Development: Uses local emulator
if (process.env.VUE_APP_USE_EMULATORS === 'true') {
  // Connect to localhost:8081
}
// Production: Uses Firebase production servers

Testing

Before Fix

# Console Errors
TypeError: firebase.firestore is not a function
FirebaseError: Missing or insufficient permissions

After Fix

# Console Success
🔥 Connected to Firestore emulator on localhost:8081
Data successfully saved to calibrations collection!

Test Steps

  1. ✅ Start Firebase emulator: firebase emulators:start --only firestore
  2. ✅ Start Vue dev server: npm run serve
  3. ✅ Complete calibration process
  4. ✅ Save calibration data successfully
  5. ✅ Verify data in emulator (no production calls)

Breaking Changes

None - This is a bug fix that maintains existing functionality

Backwards Compatibility

Fully Compatible

  • Production builds unaffected (VUE_APP_USE_EMULATORS=false)
  • Existing Firebase configuration preserved
  • No API changes

Performance Impact

🚀 Positive Impact

  • Faster development (local emulator vs network calls)
  • Reduced Firebase usage costs during development
  • Eliminated network latency for Firestore operations

Security Considerations

🔒 Enhanced Security

  • Development data isolated from production
  • No risk of accidentally modifying production data
  • Emulator provides safe testing environment

Documentation Updates

📚 Developer Setup Instructions

Add to README.md:

## Firebase Emulator Setup

1. Install Firebase CLI: `npm install -g firebase-tools`
2. Start emulator: `firebase emulators:start --only firestore`
3. Set environment: `VUE_APP_USE_EMULATORS=true`
4. Start development: `npm run serve`

Checklist

  • Code follows project style guidelines
  • Self-review completed
  • Manual testing performed
  • No breaking changes introduced
  • Documentation updated
  • Environment variables properly handled

Related Issues

Fixes #104 - Firebase Firestore Connection Issues

Screenshots

Before (Error State)


❌ TypeError: firebase.firestore is not a function
❌ FirebaseError: Missing or insufficient permissions

After (Working State)

Data saving properly in the emulator firestore

<img width="1919" height="1102" alt="image" src="https://github.com/user-attachments/assets/812f67a5-e388-4b13-8673-5fa4cc8b9545" />

Deployment Notes

  • Ensure production environment has VUE_APP_USE_EMULATORS=false
  • Firebase emulator only needed for development
  • Production Firebase security rules remain unchanged

Reviewer Notes:

  • This fix enables the selective point recalibration feature to work properly
  • All Firebase operations now work consistently in development environment
  • No changes required for production deployment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🐛 Bug Report: Firebase Firestore Connection Issues

1 participant