Дополнительно
Как мне организовать облачные функции для военнослужащих, чтобы развернуть несколько функций из нескольких файлов?
Я хотел бы создать несколько облачных функций для военнослужащих и развернуть их все одновременно из одного проекта. Я также хотел бы отдельно каждую функцию в отдельный файл. В настоящее время я могу создать несколько функций, если я положила их в index.js такие как:
exports.foo = functions.database.ref('/foo').onWrite(event => {
...
});
exports.bar = functions.database.ref('/bar').onWrite(event => {
...
});
Однако я хотел бы foo и Bar в отдельных файлах. Я попытался это:
/functions
|--index.js (blank)
|--foo.js
|--bar.js
|--package.json
где foo.js это
exports.foo = functions.database.ref('/foo').onWrite(event => {
...
});
и bar.js это
exports.bar = functions.database.ref('/bar').onWrite(event => {
...
});
Есть ли способ достичь этого без применения всех функций в index.js?
135
14
Ах, облачные функции для загрузки опорного пункта обычно узел модулей, так что это работает
структура:
index.js:
foo.js:
bar.js:
Ответ по @jasonsirota был очень полезным. Но это может быть полезно, чтобы увидеть более подробную кода, особенно в случае HTTP срабатывает функций.
Используя такую же структуру, как в @jasonsirota'ы ответьте, допустим, вы хотите иметь два отдельных триггера функции HTTP в двух разных файлах:
структура каталогов:
index.js:
foo.js:
bar.js:
Обновление: этот документ должен помочь, мой ответ-старше этого документа.
Вот как я лично это сделал с TypeScript:
Позвольте мне предварить это, давая два предупреждения, чтобы сделать эту работу:
За пункт номер 2 я'м не уверен, почему. Секундо вы должны уважать мои настройки индекса, основной и ДБ ровно (по крайней мере, чтобы попробовать его).
индекс.ц : занимается экспортом. Я найти его чище, чтобы позволить индекса.ТС сделку с экспортом.
главная.ц: сделки с инициализацией.
дБ.ц: просто реэкспорт дБ, поэтому его имя короче, чем база
()
НТТР-функции.ТС
С узла 8 ЛТС теперь доступен с облака/функции опорного пункта, вы можете сделать следующее с распространением операторов:
пакет### /.в JSON
/index.js
/lib/foo.js
В случае с Бабель/поток это будет выглядеть так:
Макет Каталога
<БР />
src/index.js
- основного экспортного товара(ов)<БР />
src/db.js
- облако клиента SQL для Postgres<БР />
src/store.js
- опорному пункту Firestore клиента<БР />
src/someFuncA.js
- функция<БР />
src/someFuncB.js
- B функция<БР />
.babelrc
<БР />
опорного пункта.формат JSON
<БР />
пакет###
.формат JSON
<БР />
Чтобы быть простой (но работает), лично я структурированных мой код вроде этого.
*План ***
ФОО.ТС
бар.ТС
дБ.ТС
индекс.ТС
Работает для каталогов любых уровней вложенности. Просто следуйте схеме в каталогах тоже.
Чтобы быть простой (но работает), лично я структурированных мой код вроде этого.
*План ***
ФОО.ТС
бар.ТС
индекс.ТС
Работает для каталогов любых уровней вложенности. Просто следуйте схеме в каталогах тоже.
Этот формат позволяет вашей точки входа, чтобы найти дополнительные файлы функции, а также экспортировать каждую функцию в каждом файле, автоматически.
Основная Точка Входа Скрипта
Находит все .JS файлы внутри папки функции и экспорта каждой функции, экспортируемой из каждого файла.
в
в
Пример экспорта несколько функций из одного файла
в
в
протокол HTTP доступных конечных точек соответствующим названием
в
в
Одним файлом
Если у вас есть только несколько дополнительных файлов (например, только один), вы можете использовать:
в
в
bigcodenerd.org плана'ы простой шаблон архитектура для того, чтобы иметь методы разделяются на различные файлы и экспортировать в одной строкой в index.файл js.
Архитектура проекта в этом примере следующие:
projectDirectory
index.js
в
podcast.js
в
Тот же шаблон будет использоваться для removeProfile метод в файле profile.
Есть очень хороший способ, чтобы организовать все ваши облачные функции на длительный срок. Я сделал это недавно, и она работает безупречно.
Что я сделал, организовать для каждой функции облака в отдельные папки по их вызвать конечную точку. Каждая функция облако именем заканчивается
*.Ф.Яш
. Например, если у васметод
иonUpdate
триггерыПользователи/{Имя пользователя}/документ/{код документа}
то создаете два файлаonCreate.f.js и onUpdate.f.js
в каталогфункции/пользователь/документ/ и ваша функция будет называться
userDocumentOnCreate " и " userDocumentOnUpdate` соответственно. (1)Вот пример структуры каталогов:
Пример Функции ###
Index.js
(1): Вы можете использовать любое имя вы хотите. Для меня onCreate.f.js, onUpdate.f.js и т. д. кажется, более соответствующими виду вызвать их.
Так у меня есть этот проект, который имеет фоновый функции и функции для HTTP. У меня тоже тесты для модульного тестирования. Ки/КД сделает вашу жизнь намного проще при развертывании облачных функций
# Структура папок#
Примечание:
папку utils/
предназначен для совместного использования кода между функциямиfunctions/index.js ### Здесь вы можете просто импортировать все функции вам нужно, и объявлять их. Не нужно иметь логику здесь. Это делает его чище на мой взгляд. ``в JavaScript требуют('модуль-псевдоним/Регистрация'); константные функции = требуют('военнослужащих-функции');
константный метод onCreate = требуют('@фон/метод onCreate'); константный onDelete = требуют('@фон/onDelete'); константный onUpdate = требуют('@фон/onUpdate');
константный туры = требуют('@протоколу HTTP/туры'); константный полоса = требуют('@протоколу HTTP/полоса');
константный компания docpath = 'туры/{tourId}';
модуль.экспорт.метод onCreate = функции.firestore.документ(докопать).метод onCreate(метод onCreate); модуль.экспорт.onDelete = функции.firestore.документ(докопать).onDelete(onDelete); модуль.экспорт.onUpdate = функции.firestore.документ(докопать).onUpdate(onUpdate);
модуль.экспорт.туры = функции.протоколу HTTPS.по просьбе(туры); модуль.экспорт.нашивки = функции.протоколу HTTPS.по просьбе(полоса); ``
КИ/КД
Как насчет того, непрерывной интеграции и развертывания каждый раз, когда вы толкать свои изменения в репозиторий? Вы можете взять его с помощью Google облако построить Гугл. Это's бесплатная до определенного момента :) проверить это link.
./cloudbuild.и YAML ``в YAML шаги:
замены: _FIREBASE_TOKEN: ничего ``
Я использую ваниль загрузчик JS, чтобы автоматически включать все функции, которые я хочу использовать.
index.js (бутлоадера)
в
В этом примере index.js файл только авто-каталоги в корень. Он может быть расширен, чтобы ходить каталогах, честь .гитюдного и т. д. Это было для меня достаточно.
С индексного файла в место, добавляя новые функции тривиально.
/test/testA.js
в
/test/testB.js
в
НПМ запустить служить
дает:в
Этот процесс в значительной степени просто, что "писать и запускать" и, без изменения index.js файл каждый раз, когда новая функция/файл добавлен/изменен/удален.
Я провел много времени в поисках той же, и есть то, что я думаю, что это лучший способ этого добиться (Я'м через firebase@7.3.0):
https://codeburst.io/organizing-your-firebase-cloud-functions-67dc17b3b0da
Не парься ;)
Здесь'ы простой ответ, если вы'вновь создавая облачные функции с TypeScript.
У все ваши регулярные импорта в верхней просто экспортировать все функции с именем foo.ТС`.
экспорт * с './фу';`