我的module.exports = foo正在返回一个空白对象{}。谁能解释一下呢?
只有当我使用exports = module.exports = foo时,我的对象才不是空白。
答案 0 :(得分:4)
module.exports
是定义导出时重要的变量。它是从require('moduleName')
语句返回的实际对象。
为方便起见,节点必须通过以下方式预定义exports
作为别名:
var exports = module.exports;
然后,您可以分配到module.exports
或仅分配到exports
。因此,您可以执行其中任何一项操作,因为module.exports === exports
:
module.exports.myFunc1 = function() {};
module.exports.myFunc2 = function() {};
或者这个:
exports.myFunc1 = function() {};
exports.myFunc2 = function() {};
但是,当您通过为其分配新对象来重新定义module.exports
时,exports
不再是module.exports
的对象。
module.exports = {
myFunc1: function() {},
myFunc2: function() {}
};
现在,exports !== module.exports
因为您为module.exports
分配了一个新对象而exports
仍指向原始module.exports
。
因此,为了保留原来的方式(如果模块中的任何其他代码引用exports
,通常会确保exports
再次与module.exports
相同用这样的代码:
module.exports = exports = {
myFunc1: function() {},
myFunc2: function() {}
};
如果您模块中的代码从未引用exports
本身,那么您不需要以任何方式使用它,因为只有module.exports
对外部世界才有用。
答案 1 :(得分:-1)
有两种方法可以为您的模块填写导出内容。选择你喜欢的任何东西。
1)您可以使用向模块添加多个属性,如下所示:
exports.foo = function () {};
exports.bar = function () {};
2)例如,您可以定义单个对象,例如。
module.exports = Module;
function Module () {}
exports
只是module.exports
的别名。
如果要从模块返回对象,请使用它,并填充多个属性。
如果您只想从模块中返回单个值,请使用module.exports
。
如果您使用module.exports
定义模块,export
本身只是一个预定义的变量,而您不需要重写它。
您可以在docs中找到所有这些 http://nodejs.org/api/modules.html#modules_the_module_object