Javascript 如何重用或分解代码?

Javascript 如何重用或分解代码?,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,我目前正在编写很多Firebase函数,其中一些函数共享相同的变量和函数。 目前,我将它们复制粘贴到每个Firebase函数文件中,因为它们是孤立的,但我不知道在它们之间共享代码的最佳做法是什么?对于变量来说,配置文件会很酷,对于代码来说,一个所有函数都可以继承的类,但是我不知道如何做到干净 组织:目前我有一个index.js文件,它引用了我所有的Firebase函数。每个Firebase函数都是一个JS文件。这就是我的层次结构,不是最优的,也不是可维护的 例子 变量: 我目前必须在我所有的F

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

组织:目前我有一个index.js文件,它引用了我所有的Firebase函数。每个Firebase函数都是一个JS文件。这就是我的层次结构,不是最优的,也不是可维护的

例子

  • 变量: 我目前必须在我所有的Firebase中编写Mailgun的API密钥
  • 功能: getThisProcessDone(),我当前在所有Firebase函数中复制它

有人有这个想法吗?谢谢你的帮助

将您的函数置于GitHub repo之下并从主分支调用它们不是一个选项吗?我目前正在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依赖项,就可以获得依赖项的最新版本,无需修改任何内容即可部署最新版本。

对于我的功能项目,我一直在将可重用资源放入
函数/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);
};

关于如何为Firebase模块化云功能,即将每个功能放在自己的节点模块中,存在一些问题。这就是你想要的吗?谢谢加藤,我同意你的建议,不过看起来类语法不起作用。例如,当我尝试执行“class Widget=…”时,我在构建时出现了一个错误“Unexpected token:(听起来你有一个旧版本的节点?谢谢Joaquin,我将首先尝试Kato解决方案,然后如果它足够稳定,我肯定会打包所有内容并按照你说的做:)