exports 和 module.exports 的用法

本文详细解析了Node.js中模块导出的两种主要方式:exports和module.exports的使用方法及区别。通过实例展示了如何正确地暴露模块成员,避免常见错误,并介绍了同时暴露多个信息的技巧。

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

在Node中,存在两种向外暴露成员的语法,exportsmodule.exports

Node中,有一个变量exports,有这么一句代码

在日常使用中,可以使用以下方式来暴露一个成员,假如有 a.js 和 b.js 两个文件

 //b.js
exports.player = 'Reus'
exports.coyg = function(){
	console.log('COME ON YOU GUNNER')
}
 //a.js
var team = require('./b.js')

console.log(team.player)
console.log(team.coyg())

运行 node a.js 会输出

Reus
COME ON YOU GUNNER

也可以 exportsmodule.exports 一起使用

//b.js
exports.player = 'Reus'
module.exports.team = 'Arsenal'
//a.js
var info = require('./b.js')

console.log(info.player)
console.log(info.team)

运行 node a.js ,输出

Reus
Arsenal

注意!
其实在node中,有这么一句代码

var exports = module.exports

也就是说, 使用 exports 和 使用 module.exports 是一样的,在 a.js 中 require 的时候,其实是返回 return module.exports。
但是,一般情况下,不要去给 exports重新赋值,如

//b.js
exports = { palyer: 'messi' } 
//注意,这里不是 exports.xx = xx 了,而是直接赋值 exports = xxx 了
//a.js
var info = require('./b.js')

console.log(info)

运行 node a.js 会输出一个空对象

{}

因为类似这样的赋值,会使本来和 module.exports 指向同一内容的 exports 失效,如果想要 exports 再次和 module.exports 指向同一内容,则需要再次给 exports 赋值

exports = module.exports

修改一下 b.js 的代码

//b.js
exports  = { player : 'messi' }
exports = module.exports
exports.team = 'Arsenal' 
//a.js
var info = require('./b.js')

console.log(info)

最后输出的是

{ team : 'Arsenal' }

exports = module.exports 这句代码又重新把 exports 等效于 module.exports,如果此时没有 exports.team = ‘Arsenal’ 这句代码,最后输出的将是一个空对象 {}


如果需要同时暴露出多个信息,可以用下面两种方法写

  1. 使用多个 exports
//b.js
exports.player = 'messi'
exports.team = 'Barcelona'
exports.number = 10
//a.js
var info = require('./b.js)

console.log(info)

最后将输出

{ player : 'messi', team : 'Barcelona', number : 10 }
  1. 使用一个 module.exports
//b.js
module.exports = {
	player : 'messi',
	team : 'Barcelona',
	number : 10
}

注意,为什么这里可以给 module.exports 直接赋值而 exports 不行,前面说了,在 a.js 中 require 的时候默认返回是 return module.exports,而 exports 只是被 module.exports 赋值了,所以在这里给 module.exports 直接赋值一个对象是可以返回正常的数据的

//a.js
var info = require('./b.js')

console.log(info)

最后输出

{ player : 'messi', team : 'Barcelona', number : 10 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值