Node.js module.exports和exports的区别

require 用来加载代码,而 exports 和 module.exports 则用来导出代码,从接触node.js就不会它们两陌生,上代码:

foo.js

 exports.a = function(){
     console.log('a')
 }

 exports.a = 1 

test.js  

 var x = require('./foo');

 console.log(x.a) //1

foo.js

 exports.a = function(){
  console.log('a')
 }

 module.exports = {a: 2}
 exports.a = 1 

test.js

 var x = require('./foo');

 console.log(x.a)// 2

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

可以这样理解,每一个node.js执行文件,都自动的创建一个module对象,同时,module对象会创建一个exports的属性,初始化值为一个空对象,exports会引用这个module对象的exports属性,而当module.exports被改变的时候,exports不会改变。模块导出的时候,真正执行的是module.exports。

 

 

原文地址:https://www.cnblogs.com/xueandsi/p/6160775.html