我可以构建一个导出实例化变量的模块吗?
模块:
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
我是否可以在许多其他文件中使用上述模块,并将导出用作实例化变量,或者每次需要时都会重新实例化,而不是在需要它们的文件之间共享。
谢谢!
答案 0 :(得分:3)
您的示例令人困惑,因为您在多个上下文中使用module1,既作为模块,又作为另一个模块中的变量,以及该模块的导出属性。
将模块视为闭包,将导出视为返回值。很可能你想导出一个函数/工厂函数,如果你想用导出创建新的实例,每次调用它,其他任何东西都会被共享,因为它只返回对象。
的模块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
答案 1 :(得分:1)
你甚至可以做这样的事情真的很烦人。大多数npm模块使您可以创建实例化版本以避免这种愚蠢。
// 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