exports 和module.exports
时间: 2023-06-06 17:05:11 浏览: 102
exports 和module.exports 都是 Node.js 中用于暴露模块的方式。它们的作用都是将模块中的方法或变量暴露出去,供其他模块使用。之所以有两种方式,是因为它们的实现机制不同。exports 是 module.exports 的一个引用,相当于对 module.exports 的属性和方法添加了一层封装,而 module.exports 则直接暴露模块的内容。如果直接给 exports 赋值会导致 exports 与 module.exports 指向不同的对象,因此应该避免直接给 exports 赋值,而应该只修改其属性或方法。
相关问题
exports 和 module.exports
在 Node.js 中,每个模块都有一个 module 对象和一个 exports 对象。 exports 对象是 module.exports 的一个引用,最初默认为空对象{}。如果我们想要将一个模块的一个函数或对象暴露出去,我们可以将其添加到 exports 对象中,如下所示:
```javascript
// module.js
function add(a, b) {
return a + b;
}
exports.add = add;
```
在另一个文件中,我们可以通过 require 函数引入该模块并使用 exports 对象中的函数:
```javascript
// app.js
const module = require('./module.js');
console.log(module.add(2, 3)); // 输出 5
```
如果我们想要将整个模块暴露出去,我们可以将 module.exports 直接赋值为一个函数或对象,如下所示:
```javascript
// module.js
module.exports = {
add(a, b) {
return a + b;
},
multiply(a, b) {
return a * b;
}
};
```
在另一个文件中,我们可以通过 require 函数引入该模块并直接使用该模块导出的对象或函数:
```javascript
// app.js
const module = require('./module.js');
console.log(module.add(2, 3)); // 输出 5
console.log(module.multiply(2, 3)); // 输出 6
```
exports 和 module.exports 区别?
在Node.js中,exports和module.exports都是用于导出模块的对象。它们之间的区别在于:
1. exports是module.exports的一个引用:在模块中,exports实际上是module.exports的一个引用。当你给exports对象添加属性时,实际上是在修改module.exports对象。例如,当你写下`exports.foo = 'bar'`时,相当于写下了`module.exports.foo = 'bar'`。
2. module.exports可以直接赋值:与exports不同,module.exports可以直接赋值为一个新的对象或者一个函数。这意味着你可以完全替换导出的对象。例如,你可以写下`module.exports = { foo: 'bar' }`来导出一个包含属性foo的新对象。
综上所述,exports和module.exports的区别在于对module.exports的修改方式不同。如果你只是想向外部导出一些属性或方法,可以使用exports对象;如果你想要替换整个导出对象,应该使用module.exports。
阅读全文