我目前正在编写很多Firebase函数,其中一些共享相同的变量和函数。目前,我将它们复制粘贴到每个Firebase Functions文件中,因为它们是孤立的,但我不知道在它们之间共享代码的最佳实践是什么?对于变量,配置文件会很酷,对于代码,所有函数也可以继承一个类,但我不确定如何干净
?组织:目前我有一个索引.js文件,该文件引用了我拥有的所有Firebase函数。每个 Firebase 函数都是一个 JS 文件。这就是我的层次结构,不是最佳的,也不是可维护的......
例子
- 变量:我目前必须在我所有的Firebase中编写Mailgun的API密钥
- 功能:getThisProcessDone(),我目前在所有Firebase函数中复制
有人已经有了这个想法吗?感谢您的帮助!
对于我的函数项目,我一直在将可重用的资源放入functions/lib
中,并通常要求它们作为 npm 模块。我还从定义中分离出函数中使用的代码,这有助于测试。
例如,考虑以下结构:
functions/
|-index.js
|-newWidget.function.js
|-lib/
| |-Widget.js
test/
|-newWidget.functions.spec.js
现在,如果我想声明一个触发器来处理新的小部件,我会执行以下操作:
// functions/index.js:
const functions = require('firebase-functions');
exports.processNewWidget = functions.https.onRequest(require('./newWidget.function.js').process);
// functions/newWidget.function.js
exports.process = function(req, res) {
res.send('Hello world!');
};
// test/newWidget.function.spec.js
// Note how we can easily test our widget processor separate from
// the third-party dependencies!
const newWidget = require('../functions/newWidget.function.js');
describe('newWidget', () => {
describe('process', () => {
it('should send hello world', function() {
const req = {};
cost res = { send: () => {} };
spyOn(res.send);
newWidget.process(req, res);
expect(res.send).toHaveBeenCalledWith('Hello world!');
});
});
});
为了在newWidget.functions.js中包含一个名为Widget的类,我做了这样的事情:
// functions/lib/Widget.js
class Widget {
constructor(name) { this.name = name; }
}
exports.Widget = Widget;
// functions/newWidget.function.js
class Widget = require('./lib/Widget').Widget;
exports.process = function(req, res) => {
const widget = new Widget(req.param.name);
res.send(widget.name);
};
将函数放在 GitHub 存储库下并从主分支调用它们不是一种选择吗?我目前正在 package.json 中像这样导入:
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"dependencies": {
"cex-converter": "https://github.com/joaquinperaza/cex-converter/tarball/master"
},
"private": true
}
然后,您只需要像require('cex-converter')
一样的Conde依赖项,并且您将获得依赖项的最新版本,并且不需要修改任何内容来部署最后一个版本。