Node.js模块的导入与导出详解

1.模块的导入与导出

导入:require(xxx.js)

导出:

  • exports

    exports.a = 1
    exports.b = 2
    
  • module.exports

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

区别:module.exports可以直接赋值,例如module.exports=1,而exports不能直接赋值

module.exports = 1//right
exports = 1//err

2.exports与module.exports的区别

在模块导入导出的过程中,node底层为每个js文件都创建了一个名为module对象,module对象中有一个含有一个名为exports的成员变量

module:{
    exports:{},
    ....
}

并且在每个js文件末尾,node都为我们添加了以下代码

return module.exports

每当我们通过require导入模块时,上面的语句就会执行,所以我们导入的模块是其实就是module.exports对象

exportsmodule.exports都指向同一个地址值

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

export是对module.exports的引用,即

var exports = module.exports

所以,exports和module.exports是等价的,为了减少代码的冗余,我们可以使用exports代替module.exports

并且两者可以同时使用,例如

module.exports.a = 1
exports.b = 2

当我们引入上述模块时,会获得{a:1,b:2}

错误导出示例:

module.exports.a=1
exports.b=2
exports={}
exports.c=3

当我们引入上述模块时,我们拿到的对象为{a:1,b:2}

**原因:**程序执行exports={}这段代码时,exports的指向已经发生了改变,此时exports与module.exports已经不再指向同一个对象,所以之后对exports的任何操作都无法改变module.exports所指向的值

完整示例:

foo.js

var test = require("./main.js")
console.log(test.add(1,2))//3
console.log(test.obj.a)//1

main.js

function add(x,y)
{
    return x+y
}
let obj = {
    a:1,
    b:2
}
/*方式一*/
exports.add = add//将add函数赋值给exports.add
exports.obj = obj
/*方式二*/
module.exports = {add,obj}

在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值