Node模块化CommonJs导出方式module.exports和exports的区别

本文探讨了Node.js中exports和module.exports的区别,解释了为何不能直接给exports对象赋新值,并揭示了它们在内存中的实际交互。建议使用module.exports进行模块导出,以保持与CommonJs规范一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

module.exports和exports的区别

  • 在nodejs中使用CommonJs导出数据有两种方式:
//方式一
exports.name = "test"
exports.age = 22

//方式二
module.exports = {
	name: "test",
	age: 22
}

这时有人会有疑惑,为什么不能直接给exports赋值对象导出呢:

//不能导出
exports = {
	name: "test",
	age: 22
}

让我们接着往下看

  • node导出时内部实现是:
 //两者指向同一块内存空间
 module.exports = {}; 
 exports = module.exports;
 //最后导出module.exports

虽然有两种导出方式,本质上导出的是module.exports

  • 当我们给module.exports赋值新对象时,例如:
module.exports = {
	name: 'test',
	age: 22
}

因为导出的是module.exports,所以可行。

  • 当我们给exports赋值新对象时,它与module.exports的连接就断开了。为什么会断开呢,因为本质上导出的是module.exports,当给exports重新赋值对象,exports就会指向新的一块内存空间,就和要导出的module.exports的指向不在同一块空间上,所以exports就不能直接赋值对象导出。
  • 当我们直接给exports增加属性时,例如:
//可行
exports.name = "test"

这样是可以的,因为此时它和module.exports指向的是同一块内存空间,这样的操作就相当于给module.exports增加属性,导出的是module.exports,属性会在module.exports里被导出。

总结

  • node模块化导出数据有两种方式,分别是exports.xxx和module.exports={},推荐使用module.exports。
  • module.exports是node内部实现的,不是CommonJs的一部分,exports是CommonJs的。
  • node可以用exports导出的原因是为了妥协CommonJs的规范。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值