Вставить конфигурацию Firebase по умолчанию в приложение Angular - PullRequest
3 голосов
/ 03 июня 2019

У меня есть необходимость использовать конфигурацию по умолчанию с хостинга Firebase для приложения, потому что я развертываю его в нескольких проектах.

Если бы это было обычное html-приложение, вы бы использовали:

<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="/__/firebase/6.1.0/firebase-app.js"></script>

<!-- TODO: Add SDKs for Firebase products that you want to use
     https://firebase.google.com/docs/web/setup#reserved-urls -->

<!-- Initialize Firebase -->
<script src="/__/firebase/init.js"></script>

Но я использую угловое приложение, поэтому хочу внедрить его при инициализации модуля приложения.Я пытался сделать что-то вроде этого:

let firebaseConfig = environment.firebase;

if (environment.production) {
  console.log('loading init');
  fetch('/__/firebase/init.json').then(async response => {
    firebaseConfig = await response.json();
  });
}

@NgModule({
  declarations: [
    AppComponent
  ],

  imports: [
    BrowserModule,
    AngularFireModule.initializeApp(firebaseConfig),

Это только часть моего модуля приложения, но вы можете отчасти понять идею.Если он находится в рабочем состоянии, я хочу получить его из init.json, но если нет, я хочу получить его из настроек среды.

И, поскольку это асинхронная операция, как я могу заставить ее работать?

1 Ответ

3 голосов
/ 03 июня 2019

Вот вариант, который вы можете попробовать:

app.module.ts

@NgModule({
  ...
  imports: [
    BrowserModule,
    AngularFireModule,
  ]
  ...

main.ts

import { FirebaseOptionsToken } from '@angular/fire';

if (environment.production) {
  enableProdMode();
}

function loadConfig() {
  return environment.production ?
    fetch('/__/firebase/init.json')
      .then(response => response.json())
    : Promise.resolve(environment.firebase);
}

(async () => {
  const config = await loadConfig();

  platformBrowserDynamic([{ provide: FirebaseOptionsToken, useValue: config }])
     .bootstrapModule(AppModule)
     .catch(err => console.error(err));
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...