Как правильно импортировать модуль firebase из другого файла js? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь разработать веб-приложение firebase с помощью метода auth.

В моей папке функций у меня есть файл index.js и auth.js, я импортировал метод firebase внутри index with:

const functions = require('firebase-functions');
const firebase = require('firebase-admin');
const express = require('express');
const engines = require('consolidate');
const userService = require('./auth');

const firebaseApp = firebase.initializeApp(
    functions.config().firebase
);

и индексный файл работает нормально, проблема в том, что мне нужно firebase также в файле auth, но если я пишу вверху файла:

const functions = require('firebase-functions');
const firebase = require('firebase-admin');

const firebaseApp = firebase.initializeApp(
    functions.config().firebase
);

Это из-за меня ошибка, говорящая: The default Firebase app already exists. This means you called initializeApp() more than once without providing an app name as the second argument. In most cases you only need to call initializeApp() once

Итак, я попытался получить базу огня от index примерно так: const firebase = require('./index'); Но она показывает мне эту ошибку:firebase.auth is not a function

(я вызываю firebase.auth().signInWithEmailAndPassword(email, password) в функции для входа в систему)

Единственный способ заставить это работать - написать:

const firebase = require("firebase");
var config = {
    apiKey: "*****",
    authDomain: "***.com",
    databaseURL: "https://***.com",
    projectId: "****",
    storageBucket: "v***.com",
    messagingSenderId: "*****"
  };
    firebase.initializeApp(config);

const db = firebase.firestore();

НоЯ получаю ошибки, когда пытаюсь выполнить развертывание в firebase, так что я почти уверен, что это неправильный способ сделать это.

Я думаю, что возиться с импортом, что мне делать?

1 Ответ

0 голосов
/ 26 марта 2019

Похоже, что два файла JavaScript объединяются в одно приложение. Это означает, что вам нужно импортировать оба файла, но следует только инициализировать приложение Firebase в файле, который загружается первым в пакет (вероятно, index.js). Вторичный файл, который нуждается в Firebase, должен содержать только импорт и , а не initializeApp.


В качестве обходного пути, вы можете убедиться, что приложение инициализируется только один раз, обернув его в if следующим образом:

if (firebase.apps.length === 0) {
  var config = {
    ...
  };
  firebase.initializeApp(config);
}

Наконец, код, которым вы поделились, представляет собой смесь кода JavaScript на стороне клиента и на стороне сервера (облачные функции), что затрудняет уверенность в происходящем.

Имейте в виду, что этот импорт должен присутствовать только в коде JavaScript, который выполняется на сервере Cloud Functions:

const functions = require('firebase-functions');
const firebase = require('firebase-admin');

И этот код возможен только в коде JavaScript, который выполняется на клиенте:

firebase.auth().signInWithEmailAndPassword(email, password)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...