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

我正致力于支持一个REST API,它具有数千个函数/对象/统计信息/等等,并且将所有这些调用放到一个文件中并不会让我非常容易维护。 我想要做的是有一个基本的文件,它具有主要的构造函数,一些实用程序和非常常用的函数,然后是API调用的每个部分的文件。

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

让我试着说明我期待的事情:

1)'base'文件的主要构造函数有:

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

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

 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文件似乎没有去我的….没有提到加载需要太长的时间! 谢谢 :)

解决scheme:对于那些未来可能会遇到的问题…我将Object.assign的源代码移回到我的v0.12版本的Node中,并使其工作。

我使用这里的代码: https : //github.com/sindresorhus/object-assign/blob/master/index.js,并把它放在一个单独的文件,我只是require('./object-assign.js')而不分配给一个变种。 然后我的代码看起来像这样:

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

而且我的所有函数都显示在Main()对象下面,太酷了:)

起初,每个文件在自己的范围内工作,所以所有的本地variables不共享。


然而,作为hacky的方法,你可以直接将Main添加到全局可用的全局范围中,通过编写global.Main = Main权限,在定义它之后,请确保在需求列表中首先需要主文件。


更好的 (谁说的?)方法是稍后扩展Main的原型,但在这种情况下,您可能需要更新大量的代码 。 只需在基类中添加其他function即可

file1.js

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

index.js

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

舒尔。 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"));