exports与module.exports的关系
node中模块化采用CommonJS模块规范,使用exports / module.exports进行导出,使用require进行加载
在b.js文件中导出a变量与foo函数
var a = 1
function foo () {
console.log('foo')
}
exports.a = a
exports.foo = foo
也可以写成
module.exports.a = a
module.exports.foo = foo
因为exports是module.exports的一个引用,module是对象,console.log(module)打印如下
可以看到,Module中的exports也是对象,exports.a = a等价于module.exports.a,都是为module.exports对象赋值
在a.js引用b.js中导出的对象(b.js默认会将module.exports导出)
const b = require('./b.js')
console.log(b)
b为对象,包含a、foo两个key值
只导出变量 / 函数
错误示范
var a = 1
exports = a
或者
function foo () {
console.log('foo')
}
exports = foo
在a.js中引入
注意:exports是module.exports的引用,为exports重新赋值,最终还是module.exports导出
在默认情况下,module.exports为空对象,导出变量 / 函数只需为module.exports重新赋值
var a = 1
module.exports = a
或者
function foo () {
console.log('foo')
}
module.exports = foo