在commonjs中 module.exports 和 exports 的关系是什么
时间: 2023-07-28 09:19:24 浏览: 46
在 CommonJS 模块系统中,`module.exports` 和 `exports` 是两个不同的变量,但它们之间有着一定的关系。
在一个模块中,`module.exports` 是一个对象,表示当前模块的导出对象。它是模块系统中的一个特殊变量,可以用来导出模块的公共 API。例如:
```js
// 导出一个函数
module.exports = function add(a, b) {
return a + b
}
```
在这个示例中,我们使用 `module.exports` 导出了一个名为 `add` 的函数。其他模块可以使用 `require` 函数来导入这个函数,并调用它。
另外一个变量 `exports` 是 `module.exports` 的一个引用。它是一个普通的对象,可以用来向外导出模块的公共 API。例如:
```js
// 导出两个函数
exports.add = function(a, b) {
return a + b
}
exports.multiply = function(a, b) {
return a * b
}
```
在这个示例中,我们使用 `exports` 导出了两个函数 `add` 和 `multiply`。这两个函数将会成为模块的公共 API,其他模块可以使用 `require` 函数来导入并调用它们。
需要注意的是,虽然 `exports` 是 `module.exports` 的一个引用,但是不能直接给 `exports` 赋值来导出模块的公共 API。例如,下面的代码并不能导出一个名为 `add` 的函数:
```js
exports = function add(a, b) {
return a + b
}
```
这是因为 `exports` 只是 `module.exports` 的一个引用,给 `exports` 赋值并不会改变 `module.exports` 的值。如果要导出一个函数,应该直接给 `module.exports` 赋值。