实例化事物的节点模块?
我可以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