Search code examples
angularfirebaseangularfire2

Receiving "error TS2304: Cannot find name 'firebase'."


Trying to connect an AngularJS template to firebase, but cannot seem to solve the issue.

I have already npm installed everything I could including typings, angularfire, firebase, and a few more.

Here is my app.component.ts:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-root',
  template: '<router-outlet></router-outlet>',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  title = 'app';

  ngOnInit() {
    const config = {
      apiKey: "AIzaSyBKOJjrzrgT0rXZxonOgk8qM-OIlUjJA4I",
      authDomain: "tn-test-0001.firebaseapp.com",
      databaseURL: "https://tn-test-0001.firebaseio.com",
      projectId: "tn-test-0001",
      storageBucket: "tn-test-0001.appspot.com",
      messagingSenderId: "564114143143"
    };
    firebase.initializeApp(config);
  }

}

Here is my package.json:

  "private": true,
  "dependencies": {
    '''
    "angular-tree-component": "^7.0.2",
    "angular2-text-mask": "^8.0.4",
    "angularfire2": "5.0.0-rc.4",
    "classlist.js": "^1.1.20150312",
    "core-js": "^2.4.1",
    "d3": "^3.5.17",
    "echarts": "^4.0.4",
    "firebase": "^4.3.0",
    "hammerjs": "^2.0.8",
    "https": "^1.0.0",
    "imagesloaded": "^4.1.4",
    "isotope-layout": "^3.0.6",
    "mandrill-api": "^1.0.45",
    "masonry-layout": "^4.2.1",
    "moment": "^2.18.1",
    "ng-scrollreveal": "^2.2.0",
    "ngx-bootstrap": "^2.0.5",
    "ngx-echarts": "^3.1.0",
    "ngx-filter-pipe": "^2.1.0",
    "ngx-isotope": "^0.1.7",
    "ngx-nvd3": "^1.0.9",
    "ngx-perfect-scrollbar": "^5.3.5",
    "ngx-quill": "^2.1.2",
    "ngx-swiper-wrapper": "^6.0.0",
    "rickshaw": "^1.6.5",
    "rxjs": "^6.0.0",
    "rxjs-compat": "^6.4.0",
    "scrollreveal": "^3.3.6",
    "text-mask-addons": "^3.7.1",
    "web-animations-js": "^2.3.1",
    "zone.js": "0.8.26"
  },

The error I'm recieving in terminal: ERROR in src/app/app.component.ts(20,5): error TS2304: Cannot find name 'firebase'.

I have tried everything I have found on the web thus far and it seems that nothing is working. I'm assuming it is some simple fix, but I cannot find it. Please let me know what other information/code you may need.


Solution

  • To fix it you need to add

    import * as firebase from 'firebase';

    BUT

    You should use @angular/fire or (angularfire2 for older versions) instead of firebase itself.

    Then you can define the config in environment.ts and environment.prod.ts

    export const environment = {
      production: false;
      config = {
              apiKey: "AIzaSyBKOJjrzrgT0rXZxonOgk8qM-OIlUjJA4I",
              authDomain: "tn-test-0001.firebaseapp.com",
              databaseURL: "https://tn-test-0001.firebaseio.com",
              projectId: "tn-test-0001",
              storageBucket: "tn-test-0001.appspot.com",
              messagingSenderId: "564114143143"
            };
    };
    

    And then you have to initialize it inside of AppModule

    ...
    import { AngularFireModule } from '@angular/fire';
    import { environment } from './environment';
    
    @NgModule({
      imports: [
        BrowserModule,
        AngularFireModule.initializeApp(environment.config)
        // Other modules
      ],
      declarations: [AppComponent],
      bootstrap: [AppComponent]
    })
    export class AppModule {}
    

    This will do the work instead firebase.initializeApp(config);. To use other functionality you would also need to use other modules like AngularFireAuthModule and so on.