跨越多个文件的Node.JS模块/对象?

时间:2017-09-26 19:43:45

标签: javascript node.js

我正在努力支持REST API,它实际上有数千个函数/对象/统计信息/等等,并将所有这些调用放在一个文件中并不会让我觉得非常难以维护。我想要做的是拥有一个基地'具有主构造函数的文件,一些实用程序和非常常见的函数,然后是API调用的每个部分的文件。

问题:如何将其他文件中的函数附加到' base'对象,以便引用主对象允许从已添加到程序中的子部分进行访问??

让我试着说明我要做的事情:

1)' base' file有主构造函数:

var IPAddr = "";
var Token = "";
exports.Main = function(opts) {
  IPAddr = opts.IPAddr;
  Token = opts.Token;
}

2)' file1'有一些我想要定义的子功能:

Main.prototype.Function1 = function(callback) {
   // stuff done here
   callback(error, data);
}

Main.prototype.Function2 = function(callback) {
   // stuff done here
   callback(error,data);
}

3)程序文件将所有内容整合在一起:

var Main = require('main.js');
var Main?!? = require('file1.js');

Main.Function1(function(err,out) {
  if(err) {
    // error stuff here
  }
  // main stuff here
}

有没有办法组合多个代码文件中的对象?一个120,000行的Node.JS文件似乎不是我的方式....更不用说加载需要太长时间!谢谢:))

解决方案:对于那些可能在未来偶然发现的人......我获取了Object.assign的源代码,然后将其移植到我的v0.12版本的Node中并使其正常工作。

我使用了此处的代码:https://github.com/sindresorhus/object-assign/blob/master/index.js并将其放在我require('./object-assign.js')的单独文件中,而不将其分配给var。然后我的代码看起来像这样:

require('./object-assign.js');
var Main = require('./Main.js');
Object.assign(Main.prototype, require('./file1.js'));
Object.assign(Main.prototype, require('./file2.js'));

这两个文件中的所有功能都显示在Main()对象下......太酷了:)

2 个答案:

答案 0 :(得分:0)

舒尔。 constructor.js

module.exports = function(){
 //whatever
};

的prototype.js

module.exports = {
  someMethod(){ return "test";}
};

main.js

const Main = require("./constructor.js");
Object.assign( Main.prototype, require("./prototype.js"));

答案 1 :(得分:0)

首先,每个文件都在自己的范围内工作,因此不会共享所有局部变量。

但是,作为 hacky 方法,您可以在定义Main后立即将global.Main = Main添加到可用的全局范围内,请确保您在要求列表中首先要求主文件。

更好 (谁说?)的方法是稍后扩展Main的原型,但在这种情况下你可能需要 更新很多代码 。只需mix-in基类的其他功能

file1.js

module.exports = {
    x: function() {/*****/}
}

index.js

var Main = require('main.js');
Object.assign(Main.prototype, require('file1.js'));