在一个文件中(otherFile.js)我有这个:
exports = function() {}
在我的主文件中我有这个:
var thing = require('./otherFile.js');
new thing();
然而,这给了我以下错误:
TypeError: object is not a function
如果在otherFile.js中我改为:
exports.myFunction = function() {}
在我的主文件中我有这个:
var thing = require('./otherFile.js');
new thing.myFunction();
然后它完美地运作。为什么我不允许将函数分配给exports变量?
答案 0 :(得分:2)
如果要更改导出的对象本身,则会将其分配给module.exports
。这应该有效(在otherFile.js中):
module.exports = function() {}
详细说明原因:
重新分配变量不会改变之前引用的对象(这基本上就是你正在做的事情)。一个简单的例子就是:
function test(a) {
a = { test: 'xyz' };
console.log(a);
}
var x = { test: 'abc' };
test(x);
console.log(x);
基本上,通过为函数分配导出,您希望变量x
的值为{ test: 'xyz' }
,但它仍然是{ test: 'abc' }
,因为该函数引入了一个新变量(它仍然引用相同的对象,但更改a.test
将改变两者的输出)。这基本上是CommonJS模块(Node使用的)的工作原理。
答案 1 :(得分:0)
考虑以下代码:
!function(exports) {
// your module code
exports = 12345
}(module.exports)
console.log(module.exports)
它不会工作,很容易理解为什么。 Node.js exports
对象的定义与此完全相同,除了参数排序。
所以始终使用module.exports
代替exports
,它会做正确的事。