Node.js Module.exports和exports

在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名。每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {},用作文件的导出。

创建一个main.js,打印moudle

console.log(module);

module

Node为每个模块提供一个exports变量,指向module.exports。可以通俗的理解为:exports和module.exports指向同一个对象,及exports = module.exports = {};
给Module.exports添加属性类似于给exports添加属性。例如:

module.exports.name = function() { 
console.log('My name is kevin'); 
}; 

同样,exports是这样的 :

exports.name = function() { 
console.log('My name is kevin'); 
}; 

module.exports

(1)程序导出的永远是 module.exports
(2)如果你创建了 既有 exports 又有 module.exports 的模块,那它会返回 module.exports(如下图)


为什么要拿一个 exports 来做 module.exports 的引用?而不是直接使用 module.exports ?
其实是为了保证,模块的初始化环境是干净的。同时也方便我们,即使改变了 module.exports 指向的对象后,依然能沿用 exports的特性。通过exports = module.exports的方法,让其恢复原来的特点。

使用场景

什么情况下使用module.exports,什么时候用exports?
如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports;及你的模块属于“模块实例(module instances)”,就像官方文档中给出的示例那样,那么exports足以满足要求。
最后用官方的一句话,简述两者区别:

If you want the root of your module’s export to be a function (such as a constructor) 
or if you want to export a complete object in one assignment instead of building it one property at a time, 
assign it to module.exports instead of exports.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,155评论 0 2
  • 模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分...
    MapleLeafFall阅读 1,207评论 0 0
  • 1 Node.js模块的实现# 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都...
    七寸知架构阅读 2,105评论 1 50
  • 最近正在学习nodejs,看到nodejs模块这块,发现nodejs模块有两种方式对外暴露方法exports和mo...
    程序鱼阅读 6,038评论 9 33
  • 森森差不多是从高二上学期十月份中旬开始发福,,并且还对不起一个真心真意待我,对我百般忍让百般讨好的姐们,,是的,我...
    饼森森阅读 210评论 0 1