实例化事物的节点模块?

我可以build立一个导出实例化variables的模块吗?

模块:

var module1 = require('module1') var Module2 = require('module2') module1.dosomething(variables) exports.module1 = module1 //or module2 = new Modle2(variables) module2.dosomething(variables) exports.module2 = module2 

我是否可以在其他许多文件中使用上面的模块,并使用导出作为实例化variables,或者每次需要时都会重新实例化它们,而不是在需要它们的文件之间共享。

谢谢!

你的例子很混乱,因为你在多个上下文中使用module1,既作为一个模块,又作为另一个模块中的variables,以及该模块的导出属性。

把模块看作是闭包和导出作为返回值。 最有可能的是你想导出一个函数/工厂函数,并且每次如果你想用导出来创build新的实例时都会调用它,因为它只是返回对象,所以其他的东西将被共享。

模块1

 module.exports.var1 = function(opts) { // do stuff return variables; }; module.exports.var2 = new Blah(); // single instance 

其他模块

 var var1 = require('module1').var1({ opt1: 'foo' }); // New instance every time var var2 = require('module1').var2; // Same var instance even if you include in another module 

你甚至可以做这样的事情真的很烦人。 大多数npm模块使你创build实例化的版本,以避免这种愚蠢。

 // file.js var m1 = require('./m1'); m1.awesome = false; console.log("I am awesome", m1.awesome); // file2.js var m1 = require('./m1'); console.log("I am awesome", m1.awesome); // both.js require('./file'); require('./file2'); // m1.js exports.awesome = true; 

现在运行这个:

 node file1.js I am awesome false node file2.js I am awesome true node both.js I am awesome false I am awesome false