Свойство "firebase" не существует по типу {production: boolean;</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"> <span class="google-src-text" style="direction: ltr; text-align: left">} }</span>

Поэтому я пытался создать и развернуть приложение Angular 4 для производства как на Firebase, так и на Heroku, но я столкнулся с ошибкой следующим образом:

ОШИБКА в /Users/.../... (57,49): свойство 'firebase' не существует в типе '{production: boolean; }'. }".

Это происходит, когда я запускаю ng build --prod, и мои серверы развертывания работают отлично. Вот мой файл app.module.ts, для справки:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AngularFireModule } from 'angularfire2';
import { AngularFireDatabaseModule } from 'angularfire2/database';
import { Ng2ScrollimateModule } from 'ng2-scrollimate';
import { Ng2PageScrollModule } from 'ng2-page-scroll';

import { HttpModule } from '@angular/http';
import {
  trigger,
  state,
  style,
  animate,
  transition,
  keyframes
} from '@angular/animations';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { environment } from '../environments/environment';

import { AppComponent } from './app.component';

import { LogoComponent } from './logo/logo.component';
import { InfoComponent } from './info/info.component';
import { AboutComponent } from './about/about.component';
import { DividerComponent } from './divider/divider.component';
import { ProficienciesComponent } from './proficiencies/proficiencies.component';
import { ProficiencyComponent } from './proficiency/proficiency.component';
import { PortfolioComponent } from './portfolio/portfolio.component';
import { ProjectComponent } from './project/project.component';
import { ResumeComponent } from './resume/resume.component';
import { FooterComponent } from './footer/footer.component';
import { ContactComponent } from './contact/contact.component';
import { LoadingComponent } from './loading/loading.component';

@NgModule({
  declarations: [
    AppComponent,
    LogoComponent,
    InfoComponent,
    AboutComponent,
    DividerComponent,
    ProficienciesComponent,
    ProficiencyComponent,
    PortfolioComponent,
    ProjectComponent,
    ResumeComponent,
    FooterComponent,
    ContactComponent,
    LoadingComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    BrowserAnimationsModule,
    AngularFireModule.initializeApp(environment.firebase),
    AngularFireDatabaseModule,
    Ng2ScrollimateModule,
    Ng2PageScrollModule.forRoot()
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

environment.prod.ts

export const environment = {
  production: true
};

environment.ts

export const environment = {
  production: true,
  firebase: {
        apiKey: "...",
        authDomain: "project.firebaseapp.com",
        databaseURL: "https://project.firebaseio.com",
        projectId: "project",
        storageBucket: "project.appspot.com",
        messagingSenderId: "..."
  }
};

После очистки StackOverflow и GitHub для возможных решений, похоже, нет разработчиков, которые столкнулись с этой точной ошибкой и опубликовали свои выводы, поэтому мне было интересно, знает ли кто, как решить эту проблему. Большое спасибо заранее!

Ответ 1

При запуске ng build --prod угловой кли будет использовать environment.prod.ts файл и ваш environment.prod.ts файлы environment переменный не имеет firebase поля, следовательно, вы получаете исключение.

Добавьте поле в environment.prod.ts

export const environment = {
  production: true,
  firebase: {
    apiKey: "...",
    authDomain: "project.firebaseapp.com",
    databaseURL: "https://project.firebaseio.com",
    projectId: "project",
    storageBucket: "project.appspot.com",
    messagingSenderId: "..."
  }
};

Ответ 2

Мой подход заключается в объединении общего объекта среды с prod. Вот моя environment.prod.ts:

import { environment as common } from './environment';

export const environment = {
  ...common,
  production: true
};

Таким образом, общий объект окружения действует как переопределяемый по умолчанию для всех других сред.

Ответ 3

Я ненавижу дубликаты кода
поэтому создайте отдельный файл с именем environments/firebase.ts с контентом

export const firebase = {
    //...
};

Использование

import {firebase} from '../environments/firebase';
//...
AngularFireModule.initializeApp(firebase)

все ясно, как для меня

Ответ 4

Я получил ту же ошибку, потому что я с ошибкой написал "Firebase" как "Firebas"

firebas: {apiKey: "...", authDomain: "project.firebaseapp.com", databaseURL: " https://project.firebaseio.com ", projectId: "проект", storageBucket: "project.appspot.com", messagingSenderId: "..."}

Ответ 5

Это может быть из-за класса сделать его публичным, а не частным

Ответ 6

Удостоверьтесь, что между firebase нет пробелов :

То есть, это должна быть firebase: не firebase :