三段代码区别Node中的exports和module.exports

本文详细探讨了Node.js中exports和module.exports的区别,通过实例代码展示了当导出函数或对象时,如何影响模块的导出内容。重点在于理解当module.exports被赋值为新对象时,exports将不再起作用,而module.exports才是决定模块导出内容的关键。
摘要由CSDN通过智能技术生成

在学习Node过程中,对exportsmodule.exports有所混淆,所以在弄清楚这两者的区别之后决定用博客记录下两者的区别。
多说不易,先直接上代码,利用exports导出a函数,module.exports导出b函数
text.js

function a (){
  
}

function b (){
  
}
exports.a = a
module.exports.b = b

如果我们打印test模块最终导出的对象将会是下列这种情况

const test = require("test.js)
/**
  test: {
  a: function(),
  b: function()
  } **/

这时你会发现ab函数竟然都被导出,那是不是exportsmodule.exports导出的是一个对象呢?我们来看看下一个代码

function a (){
  
}

function b (){
  
}
exports.a = a
module.exports = {
  b
}
/**以上的module.exports = {
 b
}
等同于以下的代码
const newObj = {
 b: b
}
module.exports = newObj
**/

而此时的test.js导出的对象是这样的

  const test = require("test.js)
/**
  test: {
  b: function()
  } **/

这时导出的对象中就只有b这一个函数,说明这时module.exports = {b}{}对象是作为我们test.js最终导出的对象。那就是当我们没有对moudle.exports导出的对象进行更改时,将会导出默认对象,并且exports也是指向该对象的。当我们通过module.exports的对象不是默认对象时,exports的指向会在哪里呢?来看看下一列代码

function a (){
  
}

function b (){
  
}
module.exports = {
  b
}
exports.a = a

再次打印导出的对象

  const test = require("test.js)
/**
  test: {
  b: function()
  } **/

通过这三次的示例代码,相信已经对module.exportsexports之间的关系有所理解了。当我们从某个模块中导入时,其实导入了module.exports定义的对象,而exportsmodule.exports没有改变导出的对象,即默认导出对象的一个引用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值