我想为Firebase创建多个 Cloud 功能,并从一个项目同时部署它们 . 我还想将每个函数分成一个单独的文件 . 目前我可以创建多个函数,如果我将它们都放在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中的情况下完成此操作?
9 回答
啊,Firebase的 Cloud 功能正常加载节点模块,所以这样可行
结构体:
index.js:
foo.js:
bar.js:
@jasonsirota的答案非常有帮助 . 但是查看更详细的代码可能很有用,尤其是在HTTP触发函数的情况下 .
使用与@ jasonsirota的答案相同的结构,假设您希望在两个不同的文件中有两个单独的HTTP触发器函数:
目录结构:
index.js:
foo.js:
bar.js:
这是我个人用打字稿做的人:
让我作为前言,给出两个警告来完成这项工作:
进口/出口事宜的顺序 index.ts
db必须是单独的文件
对于第2点,我不确定为什么 . Secundo你应该完全尊重我的索引,main和db的配置(至少要尝试一下) .
index.ts :处理出口 . 我发现让index.ts处理出口更清洁 .
main.ts :处理初始化 .
db.ts :只是重新导出数据库,因此其名称短于
database()
http-functions.ts
对于Babel / Flow,它看起来像这样:
目录布局
src / index.js - 主要出口
src / db.js - Postgres的Cloud SQL Client
src / store.js - Firebase Firestore客户端
src / someFuncA.js - 功能A.
src / someFuncB.js - 功能B.
.babelrc
firebase.json
package.json
为了保持简单(但是工作),我亲自构建了我的代码 .
Layout
foo.ts
bar.ts
index.ts
适用于任何嵌套级别的目录 . 只需遵循目录中的模式 .
使用Node 8 LTS现在可以使用Cloud / Firebase功能,您可以使用扩展运算符执行以下操作:
/package.json
/index.js
/lib/foo.js
此格式允许您的入口点查找其他功能文件,并自动导出每个文件中的每个功能 .
Main Entry Point Script
查找函数文件夹中的所有.js文件,并导出从每个文件导出的每个函数 .
Example Export of Multiple Functions from One File
http可访问 endpoints 已适当命名
One file
如果您只有一些其他文件(例如只有一个),您可以使用:
有一种非常好的方法可以长期组织所有 Cloud 功能 . 我最近这样做了,它完美无缺 .
我所做的是根据触发 endpoints 在单独的文件夹中组织每个 Cloud 功能 . 每个 Cloud 函数文件名都以
*.f.js
结尾 . 例如,如果user/{userId}/document/{documentId}
上有onCreate
和onUpdate
触发器,则在目录functions/user/document/
中创建两个文件onCreate.f.js
和onUpdate.f.js
,您的函数将分别命名为userDocumentOnCreate
和userDocumentOnUpdate
. (1)这是一个示例目录结构:
样本函数
Index.js
(1):您可以使用任何您想要的名称 . 对我来说,onCreate.f.js,onUpdate.f.js等似乎与它们的触发类型更相关 .
我使用vanilla JS bootloader来自动包含我想要使用的所有函数 .
index.js (bootloader)
此示例index.js文件仅自动包含根目录中的目录 . 它可以扩展到步行目录,荣誉.gitignore等 . 这对我来说已经足够了 .
使用索引文件,添加新函数是微不足道的 .
/test/testA.js
/test/testB.js
npm run serve
收益率:这个工作流几乎就是“编写和运行”,无需在每次添加/修改/删除新函数/文件时修改index.js文件 .