2017-10-11 24 views
-1

我目前正在编写大量Firebase函数,其中一些共享相同的变量和函数。 目前我将它们复制粘贴到每个Firebase函数文件中,因为它们是孤立的,但我不知道在它们之间共享代码的最佳做法是什么?对于变量来说,一个配置文件会很酷,对于代码来说,所有的函数都可以继承,但我不确定如何做到这一点干净?如何重用或分解代码?

组织:目前我有一个引用所有Firebase函数的index.js文件。每个Firebase函数都是一个JS文件。这是我有层次,不是最佳的,也没有维护...

例子

  • 变量: 我现在有写Mailgun的API密钥在我所有的火力地堡
  • 功能: getThisProcessDone()我目前复制了所有的Firebase功能

任何人都已经有这个想法?谢谢你的帮助!

+0

有几个问题如何为Firebase模块化Cloud Functions,即将每个功能放入其自己的节点模块中。那是你在找什么? –

回答

1

让你的函数在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')孔德依赖,你会得到你的依赖的最后一个版本,不需要修改任何部署您的最后一个版本。

+1

感谢华金,我要先尝试加藤解决方案,如果它足够稳定,我一定会包装一切,如你所说:) – ibox

3

对于我的函数项目,我一直把我的可重用资源放入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); 
}; 
+0

谢谢加藤,我会去你的建议,但看起来像类语法不工作。例如,当我尝试做“class Widget = ...”时,出现错误“意外的标记=”,而建筑:( – ibox

+0

听起来像你有旧版本的节点? – Kato