Javascript 为什么';t下列'exports={z:function(){};`工作
a.jsJavascript 为什么';t下列'exports={z:function(){};`工作,javascript,node.js,commonjs,Javascript,Node.js,Commonjs,a.js exports = { z: function() { console.log('aZ'); } }; require('./a').z(); // error main.js exports = { z: function() { console.log('aZ'); } }; require('./a').z(); // error 为什么要求('./a')返回空对象?因为在您的示例中,您覆盖了导出全局,而不是
exports = {
z: function() {
console.log('aZ');
}
};
require('./a').z(); // error
main.js
exports = {
z: function() {
console.log('aZ');
}
};
require('./a').z(); // error
为什么
要求('./a')
返回空对象?因为在您的示例中,您覆盖了导出
全局,而不是更新它。如果将代码替换为:
exports.z = function() {
console.log('aZ');
};
它将起作用,因为您正在向实际导出对象添加z
如果您查看,您将看到: 对module.exports的引用,该引用比类型短
所以你可以想象这种情况:
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(){}};
is
module.exports={}
可用于模拟es6
的默认(未命名)导出?