node 中module.exports和exports导出的关系

node 中module.exports和exports的关系

  1. 首先要知道module.exportsexports都是CommandJS的导出模块规范
  2. 模块中存在一个module对象,代表模块自身,module对象有个exports属性,用于数据的导出
  3. exports === module.exports两者之间是全等的关系
  4. 例子
    • obj对应着的是module
    • hobby对象相当于模块中的exports
    • aihao就是exportsaihao的指向还是原来的obj对象中的指向
    • 只是为了以后调用方便就将obj.hobby直接使用aihao代替,这个时候aihaoobj.hobby还是全等的关系,aihao === obj.hobby // true
    let obj = {
    	name: "小火车",
    	hobby: {}
    }
    let aihao = obj.hobby
    aihao.age = 8
    console.log(obj) // { name: '小火车', hobby: { age: 8 } }
    
    
  5. 注意如果使用了aihao = 123就相当于直接改变了aihao的指向,这个时候的aihaoobj.hobby没有关系了aihao === obj.hobby // false
    let obj = {
        name: "小火车",
        hobby: {}
    }
    let aihao = obj.hobby
    aihao = 8
    console.log(obj) // { name: '小火车', hobby: {} }
    console.log(aihao === obj.hobby) // false
    
  6. 如果直接使用exports赋值的方法导出模块 错误方式exports = age
    // 模块的写法
    const age = 8
    exports = age
    	
    // 接收模块
    const ex = require("./ex")
    console.log(ex) // {}
    
  7. 所以在使用exports的时候不可以直接使用赋值的方法,对象点属性值才是正确方法exports.data = age
    // 模块的写法
    const age = 8
    exports.data = age
    
    // 接收模块
    const ex = require("./ex")
    console.log(ex) // { data: 8 }
    
  8. 但是使用module.exports的时候可以直接赋值,因为原本的数据执行不会发生变化
    // 模块的写法
    const age = 8
    module.exports = age
    	
    // 接收模块
    const ex = require("./ex")
    console.log(ex) // 8
    

总结:exports只是module的一个属性,主要就是使用过程中需要注意如果直接对exports采用赋值的方法导出模块的话,得到的只会是一个空的对象{},所以一般在使用过程中都是直接使用module.exports导出模块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值