为什么以下 `exports = { z: function() {} };` 不起作用
Why doesn't the following `exports = { z: function() {} };` work
a.js
exports = {
z: function() {
console.log('aZ');
}
};
main.js
require('./a').z(); // error
为什么 require('./a')
return 是一个空对象?
因为在您的示例中,您正在覆盖 exports
全局,而不是更新它。如果您将代码替换为:
exports.z = function() {
console.log('aZ');
};
它将起作用,因为您正在将 z
添加到实际的导出对象。
如果您查看 docs,您会看到:
A reference to the module.exports that is shorter to type.
所以你可以想象这种情况:
var module = {
exports: { /* some export stuff */ }
};
var exports = module.exports;
现在,如果您将导出替换为 exports = something
,您实际上并没有更改 module.exports。
对于 commonjs,你应该使用 module.exports
来代替:
module.exports = {
z: function() {
console.log('aZ');
}
};
然后:
require('./a').z();
这让初学者感到困惑,但有几种导出格式的工作方式略有不同。
如果你想像你说的那样导出整个对象,你可以像这样替换整个导出:
module.exports = { z: function(){}};
您也可以直接将内容附加到导出对象
exports.z = function(){}
最后,如果您使用的是 ES6 兼容版本,则可以执行
export default { z: function(){}};
a.js
exports = {
z: function() {
console.log('aZ');
}
};
main.js
require('./a').z(); // error
为什么 require('./a')
return 是一个空对象?
因为在您的示例中,您正在覆盖 exports
全局,而不是更新它。如果您将代码替换为:
exports.z = function() {
console.log('aZ');
};
它将起作用,因为您正在将 z
添加到实际的导出对象。
如果您查看 docs,您会看到:
A reference to the module.exports that is shorter to type.
所以你可以想象这种情况:
var module = {
exports: { /* some export stuff */ }
};
var exports = module.exports;
现在,如果您将导出替换为 exports = something
,您实际上并没有更改 module.exports。
对于 commonjs,你应该使用 module.exports
来代替:
module.exports = {
z: function() {
console.log('aZ');
}
};
然后:
require('./a').z();
这让初学者感到困惑,但有几种导出格式的工作方式略有不同。
如果你想像你说的那样导出整个对象,你可以像这样替换整个导出:
module.exports = { z: function(){}};
您也可以直接将内容附加到导出对象
exports.z = function(){}
最后,如果您使用的是 ES6 兼容版本,则可以执行
export default { z: function(){}};