跨越几个文件的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"));