Невозможно экспортировать несколько облачных функций - PullRequest
1 голос
/ 16 февраля 2020

Я использую организационную структуру, описанную здесь . У меня есть следующая папка functions/:

Мой index.js файл выглядит следующим образом:

const glob = require('glob')
const camelCase = require('camelcase')
const FUNCTIONS_FOLDER = './src'

const files = glob.sync('./src/**/*.func.js', {
    cwd: __dirname,
    ignore: './node_modules/**'
})

console.log('FILE LENGTH: ', files.length)

for (let f = 0, fl = files.length; f < fl; f++) {
    const file = files[f]
    console.log('FILE: ', file)

    const functionName = camelCase(
        file
            .slice(5, -8)
            .split('/')
            .join('_')
    ) // Strip off '.func.js' and 'src/'
    console.log('FUNCTION - PRE: ', functionName)
    console.log('ENV ', process.env.FUNCTION_NAME)
    if (
        !process.env.FUNCTION_NAME ||
        process.env.FUNCTION_NAME === functionName
    ) {
        console.log('FUNCTION: ', functionName, file)
        exports[functionName] = require(file)
    }
}

и я я пытаюсь развернуть две облачные функции, определенные в каталоге functions/src/votes, однако, когда я запускаю firebase deploy --only functions, развертывается только моя функция onRequest.func.js. Я посмотрел на функции firebase: log и получил следующее:

enter image description here

Даже когда я снимаю чек

if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === functionName)

мой onWrite.func.js по-прежнему не развернут.

Я что-то не так делаю? Я был бы очень признателен за любую помощь!

Редактировать: Вот все мои функции / каталог: https://github.com/markoelez/temp_functions

1 Ответ

1 голос
/ 19 февраля 2020

Нет проблем в коде, который вы разместили в вопросе. Проблема в *.func.js файлах. Это виновник:

try {
    admin.initializeApp(functions.config().firebase)
} catch (err) {
    return err // looks like you should remove this line
}

Когда вы require второй файл admin.initializeApp() не удается с

Ошибка: приложение Firebase по умолчанию уже существует. Это означает, что вы вызывали initializeApp () более одного раза без указания имени приложения в качестве второго аргумента. В большинстве случаев вам нужно вызывать initializeApp () только один раз. Но если вы хотите инициализировать несколько приложений, передайте initializeApp () второй аргумент, чтобы дать каждому приложению уникальное имя.

Затем вы выходите из второго модуля, не назначая exports.
Если вы удалите return err, у вас будет 2 экспортированных функции в index.js:exports.

Не знаю об остальной части кода, но это должно решить проблему.

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