Используйте автоматическую настройку SDK firebase с Webpack

Я создаю веб-приложение, которое использует веб-пакет Vue с firebase. Я хотел бы, чтобы мои учетные данные firebase автоматически менялись, когда я использую firebase use <some_alias> в firebase cli. В других проектах это просто означало включение файла /__/firebase/init.js хостинга firebase. В этом проекте я использую библиотеку npm firebase и могу загрузить определенный набор учетных данных firebase с помощью

import firebase from 'firebase'

var config = {
  apiKey: '...',
  authDomain: '...',
  databaseURL: '...',
  projectId: '...',
  storageBucket: '...',
  messagingSenderId: '...'
}
firebase.initializeApp(config)

export default {
  database: firebase.database,
  storage: firebase.storage,
  auth: firebase.auth
}

Однако это не получает мои учетные данные на основе моей текущей рабочей области firebase. Вместо этого я хотел бы что-то вроде

import firebase from 'firebase'

const fbcli = require('firebase-tools');

export const getFirebaseInstance = () => {

  return fbcli.setup.web().then(config => {
    firebase.initializeApp(config)

    return firebase
  });
}

хоть и синхронный. Есть ли способ синхронно загрузить мои учетные данные firebase?


person David    schedule 12.06.2017    source источник
comment
Почему вы хотите, чтобы это было синхронно?   -  person FitzFish    schedule 15.06.2017
comment
Если эта функция не синхронна, это, вероятно, потому, что она читает файл внутри.   -  person FitzFish    schedule 15.06.2017
comment
Посмотрев на исходный код, он также делает запрос к какому-то API, поэтому выполнение этого синхронно здесь никоим образом не актуально.   -  person FitzFish    schedule 15.06.2017
comment
Я хочу, чтобы он был синхронным, потому что мой существующий код с жестко заданными значениями уже синхронен. Чтобы сделать модуль export обещанием, потребуется обновить каждый случай использования Firebase в очень большой кодовой базе, которая его широко использует. Мой второй код также инициализирует приложение несколько раз, что нежелательно.   -  person David    schedule 15.06.2017
comment
Кроме того, эти данные не быстро меняются. Это похоже на то, что определенно должно быть возможно на этапе сборки конвейера проекта, поскольку довольно легко написать внешний скрипт, который обновляет этот файл перед сборкой. Но я бы предпочел не добавлять ненужный шаг в свою сборку.   -  person David    schedule 15.06.2017
comment
Вы можете использовать await/async, если вы ориентируетесь на среду, в которой они доступны. См.: developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/ В противном случае вам следует провести рефакторинг кода.   -  person FitzFish    schedule 15.06.2017


Ответы (2)


Это было решено путем проверки window.location.host в рабочей среде и наличия объекта рабочей конфигурации, если хост был нашим рабочим именем хоста, и чтением значений из файла конфигурации в противном случае.

person David    schedule 16.06.2017

Попробуйте использовать fs.writeFileSync, как описано в этом примере, из a Сообщение в блоге firebase о чтении учетных данных:

const fbcli = require('firebase-tools');
const fs = require('fs');

// by default, uses the current project and logged in user
fbcli.setup.web().then(config => {
  fs.writeFileSync(
    'build/initFirebase.js',
    `firebase.initializeApp(${JSON.stringify(config)});`
  );
});
person subelsky    schedule 01.06.2018