0

I'm attempting to initialize my angular (typescript) app to use firebase. I have A FirebaseService class that has a method to initialize the app, i.e.,

import {Injectable} from "@angular/core";
import * as firebase from 'firebase';

const firebaseConfig = {
    apiKey: // my api key,
    authDomain: // my auth domain,
    databaseURL: // my database url,
    storageBucket: // my storage bucket,
};

@Injectable()
export class FirebaseService {

    start(): void {
        console.log("Starting firebase");
        firebase.initializeApp(firebaseConfig);
    };
}

I call FirebaseService.Start when the application starts up, but I'm currently getting the following error in the browser console

Starting firebase
core.umd.js:2837 EXCEPTION: Error in :0:0 caused by: firebase.initializeApp is not a functionErrorHandler.handleError @ core.umd.js:2837
core.umd.js:2839 ORIGINAL EXCEPTION: firebase.initializeApp is not a functionErrorHandler.handleError @ core.umd.js:2839
core.umd.js:2842 ORIGINAL STACKTRACE:ErrorHandler.handleError @ core.umd.js:2842
core.umd.js:2843 TypeError: firebase.initializeApp is not a function
    at FirebaseService.start (http://localhost:3000/app/services/firebase.service.js:24:18)
    at new AppComponent (http://localhost:3000/app/app.component.js:16:25)
    at new Wrapper_AppComponent (/AppModule/AppComponent/wrapper.ngfactory.js:7:18)
    at CompiledTemplate.proxyViewClass.View_AppComponent_Host0.createInternal (/AppModule/AppComponent/host.ngfactory.js:20:28)
    at CompiledTemplate.proxyViewClass.AppView.createHostView (http://localhost:3000/lib/@angular/core/bundles/core.umd.js:9147:25)
    at CompiledTemplate.proxyViewClass.DebugAppView.createHostView (http://localhost:3000/lib/@angular/core/bundles/core.umd.js:9407:56)
    at ComponentFactory.create (http://localhost:3000/lib/@angular/core/bundles/core.umd.js:5481:29)
    at ApplicationRef_.bootstrap (http://localhost:3000/lib/@angular/core/bundles/core.umd.js:6550:44)
    at eval (http://localhost:3000/lib/@angular/core/bundles/core.umd.js:6459:93)
    at Array.forEach (native)

My SystemJS config is set up as follows

(function (global) {
    System.config({
        paths: {
            // paths serve as alias
            "lib:": 'lib/'
        },
        // map tells the System loader where to look for things
        map: {
            // our app is within the app folder

            // angular bundles
            '@angular/core': 'lib:@angular/core/bundles/core.umd.js',
            '@angular/common': 'lib:@angular/common/bundles/common.umd.js',
            '@angular/compiler': 'lib:@angular/compiler/bundles/compiler.umd.js',
            '@angular/platform-browser': 'lib:@angular/platform-browser/bundles/platform-browser.umd.js',
            '@angular/platform-browser-dynamic': 'lib:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
            '@angular/http': 'lib:@angular/http/bundles/http.umd.js',
            '@angular/router': 'lib:@angular/router/bundles/router.umd.js',
            '@angular/forms': 'lib:@angular/forms/bundles/forms.umd.js',
            'rxjs': 'lib:rxjs',
            'firebase': 'lib:firebase'
        },
        // packages tells the System loader how to load when no filename and/or no extension
        packages: {
            app: {
                main: './main.js',
                defaultExtension: 'js'
            },
            rxjs: {
                defaultExtension: 'js'
            },
            firebase: {
                main: 'firebase.js',
                defaultExtension: 'js'
            }
        }
    });
})(this);

So it should be able to load firebase.js from my lib folder. Looking in firebase.js there certainly appears to be a function called initializeApp, i.e.,

initializeApp:function(a,c){void 0===c?c="[DEFAULT]":"string"===typeof c&&""!....

so i can't work out where I'm going wrong. Any ideas?

I'm using angular v2.2.0 and firebase v3.6.1

1

1 Answer 1

2

I wondered the same thing:

Can I use firebase directly without using angularfire2?

But anyway you can use angularfire2 library for your Angular project.

https://github.com/angular/angularfire2

For System.js, there is more info in this doc.

Edit

It is also possible to use firebase without angularfire2, for example:

import { Injectable } from '@angular/core';
import * as firebase from 'firebase';
import { environment } from '../../environments/environment';

@Injectable()
export class MyService {
  app: firebase.app.App;
  db: firebase.database.Database;
  list: any[] = [];

  constructor( ) {
    this.app = firebase.initializeApp(environment.firebase);
    this.db = firebase.database();
  }

  getList(path: string): void {
    this.list = [];

    this.db.ref(path)
    .once('value').then(snapshot => {
      snapshot.forEach(item => {
        this.list.push(item.val());            
      });
    });
  }

}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.