87 votes

La propriété 'firebase' n'existe pas sur le type { production : boolean ; }

J'ai donc essayé de construire et de déployer mon application Angular 4 pour la production à la fois sur Firebase et Heroku, mais je suis tombé sur l'erreur suivante :

ERREUR dans /Utilisateurs/.../... (57,49) : La propriété 'firebase' n'existe pas sur le type '{ production : boolean ; }'.

Cela se produit lorsque je lance ng build --prod et mes serveurs de déploiement fonctionnent parfaitement bien. Voici mon app.module.ts à titre de référence :

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 {}

environnement.prod.ts

export const environment = {
  production: true
};

environnement.ts

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

Après avoir parcouru StackOverflow et GitHub à la recherche de solutions possibles, il semble qu'aucun développeur n'ait rencontré cette erreur exacte et publié ses conclusions. Je me demandais donc si quelqu'un savait comment résoudre ce problème. Merci beaucoup d'avance !

0 votes

Que fait votre environment à quoi ressemble l'importation ?

0 votes

@echonax Laissez-moi mettre à jour la question pour vous avec mon code.

223voto

echonax Points 2077

Lorsque vous exécutez ng build --prod angular-cli utilisera l'option environment.prod.ts et votre environment.prod.ts fichiers environment ne dispose pas de la variable firebase d'où l'exception que vous obtenez.

Ajouter le champ à 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: '...',
  },
};

10voto

dhilt Points 7074

Mon approche consiste à fusionner l'objet d'environnement commun avec celui de la production. Voici mon environnement.prod.ts :

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

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

Ainsi, l'objet d'environnement commun agit comme un défaut surmontable pour tous les autres environnements.

0 votes

Cette approche me semble bonne, mais je ne sais pas pourquoi la clique d'Angular 7 affiche l'avertissement suivant : ** WARNING in Circular dependency detected : src \environments\environment.ts -> src \environments\environment.ts **

3voto

V. Kalyuzhnyu Points 1515

Je déteste les doublons dans le code
donc créons un fichier séparé nommé environments/firebase.ts avec du contenu

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

l'usage

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

tout est clair pour moi

0 votes

Alors comment cela va-t-il résoudre le problème que lorsque ng build --prod est appelé, il inclura ce fichier et que lorsque ng serve est appelé, il appellera l'autre ?

0 votes

@echonax oui je le vois dans main.<hash>.js fichier

0 votes

Je ne sais pas ce que cela signifie, mais laissez-moi l'exprimer de la façon suivante : lorsque OP appelle ng serve, angular-cli cherchera à trouver environment.ts et quand ng build --prod est appelé, angular-cli va chercher environment.prod.ts . En procédant comme dans votre réponse, les environnements de production et de développement utiliseront la même configuration.

1voto

Caleb Grams Points 80

J'ai eu la même erreur parce que j'avais mal orthographié "firebase" comme "firebas".

firebas : { apiKey : "...", authDomain : "project.firebaseapp.com", databaseURL : " https://project.firebaseio.com ", projectId : "project", storageBucket : "projet.appspot.com", messagingSenderId : "..." }

-12voto

Assurez-vous qu'il n'y a pas d'espace entre firebase y : .

C'est-à-dire qu'il devrait être firebase: pas firebase : .

0 votes

Je vois que certaines personnes ont rejeté cette réponse. Cependant, dans mon cas, cette réponse a résolu le problème auquel je faisais face. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X