a.js
exports = {
z: function() {
console.log('aZ');
}
};
main.js
require('./a').z(); // error
为什么require('./a')
会返回一个空对象?
答案 0 :(得分:6)
因为在您的示例中,您将覆盖exports
全局,而不是更新它。如果您用以下代码替换代码:
exports.z = function() {
console.log('aZ');
};
它会起作用,因为您要将z
添加到实际的导出对象中。
如果查看docs,您会看到:
对类型更短的module.exports的引用。
所以你可以想象这种情况:
var module = {
exports: { /* some export stuff */ }
};
var exports = module.exports;
现在,如果您使用exports = something
替换导出,则您实际上并未更改module.exports。
答案 1 :(得分:1)
使用commonjs,您应该使用module.exports
代替:
module.exports = {
z: function() {
console.log('aZ');
}
};
然后:
require('./a').z();
答案 2 :(得分:1)
这对于初学者来说很困惑,但有几种导出格式的工作方式略有不同。
如果你想按照你的意思导出整个对象,你可以像这样替换整个导出:
module.exports = { z: function(){}};
您也可以直接将东西附加到出口对象
exports.z = function(){}
最后,如果您使用的是ES6兼容版本,则可以
export default { z: function(){}};