我正在努力支持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()
对象下......太酷了:)
答案 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'));