node中关于exports与module.exports的区别

前言

使用require时候,关于exports与module.exports总感觉似懂非懂,今天特意仔细了解了一下。

问题

1、require是异步还是同步
2、exports与module.exports的区别

1、require是异步还是同步

答案是同步的

2、exports与module.exports的区别

其实当js require一个文件时候,会给这个文件同时生成一个exports和module对象,而module又有一个exports属性,他们都指向同一块内存区域

console.log(module.exports===exports)
//true
image.png

下面用代码 进行一下演示

//b.js
console.log(exports);
console.log(module.exports);
exports.a='我是exports'
module.exports.a='我是module.exports'
//a.js
const b=require('./b');
console.log(b)
//{ a: '我是module.exports' }

代码中清楚看出当我们使用require时候,引用的是module.exports,而不是exports,有时候我们会看到下面的写法

exports=module.exports=something;

当module.exports指向新的地址,断开了与exports的联系,因此重新让他俩指向统一地址即可。

使用建议

1、当需要直接暴露出一个函数时候,只能使用module.exports=function(){}
2、暴露某一个参数时候使用module.exports.a和exports.a都可以。
综上为了防止使用混乱,建议直接使用module.exports

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容