module.exports 和 exports 有什么区别和优劣
时间: 2024-06-06 13:03:07 浏览: 22
在 Node.js 中,每个文件都被视为一个模块。模块可以通过 module.exports 和 exports 对象向外部暴露变量、函数或对象。它们的区别在于:
1. module.exports 是 exports 的实际值,也就是说它是真正暴露给外部的对象,而 exports 只是对 module.exports 的引用。当你直接给 exports 赋值时,它不再指向 module.exports,所以无法暴露任何东西。
2. 当你给 exports 对象添加属性或方法时,它会被添加到 module.exports 上,而不是直接暴露给外部。因此,如果你想暴露一个对象而不是单个属性或方法,则必须使用 module.exports。
3. 如果你想将一个函数或对象赋给 module.exports,可以直接使用赋值运算符,但如果你想将多个属性或方法添加到 exports 上,则必须使用 module.exports。
总的来说,module.exports 更加灵活,可以直接赋值一个函数或对象,而 exports 只能通过添加属性或方法的方式向外部暴露内容。但是,在实际开发中,使用哪个取决于个人习惯和需求。
相关问题
module.exports和exports有啥区别
在Node.js的模块系统中,`module.exports`和`exports`是用于导出模块的两个对象。它们的主要区别在于它们的引用关系和导出方式。
1. `module.exports`是一个完全导出的对象,可以通过赋值来改变导出的内容。当一个模块被导入时,实际上是导入了`module.exports`指向的对象。如果你希望导出一个单一的对象或者一个构造函数,你可以直接给`module.exports`赋值。例如,`module.exports = { foo: 'bar' }`会导出一个包含`foo`属性的对象。
2. `exports`是`module.exports`的一个引用。在模块加载时,`exports`指向了`module.exports`。当你直接给`exports`赋值时,它只是改变了`exports`的引用,而不会影响`module.exports`的指向。因此,如果你想给`exports`赋值来导出内容,你需要在最后使用`module.exports`来确保正确导出。例如,`exports.foo = 'bar'; module.exports = exports`会导出一个包含`foo`属性的对象。
总结起来,`module.exports`是导出的主要方式,而`exports`只是它的一个引用。对于简单的导出场景,你可以直接使用`exports`,但对于复杂的导出场景,你应该使用`module.exports`来确保正确导出。
: https://juejin.cn/post/6844904016195206157
: https://blog.csdn.net/u014042066/article/details/105982774
: https://www.jianshu.com/p/1a5c6d2625e0
module.exports 和exports区别
在Sea.js中,module.exports和exports都是用于暴露模块成员的方式,但它们之间有一些区别。
1. module.exports是一个指向当前模块导出对象的引用,它是真正用于导出模块成员的对象。当我们使用module.exports时,我们可以直接给它赋值一个对象、函数或其他任何类型的值,这样就可以将该值作为模块的导出成员。
2. exports是module.exports的一个引用,它是一个空对象,最初指向module.exports。当我们使用exports时,实际上是在给module.exports添加属性。例如,当我们使用exports.doSomething = function() {}时,实际上是在给module.exports添加了一个名为doSomething的属性,并将其值设置为一个函数。
3. 由于exports是module.exports的引用,所以当我们给exports赋值一个新的对象时,它将不再指向module.exports,而是指向新的对象。这意味着,如果我们只使用exports来导出模块成员,而不使用module.exports,那么最终导出的结果将是一个空对象,而不是我们期望的成员。
总结来说,module.exports是真正用于导出模块成员的对象,而exports只是module.exports的一个引用。如果我们只使用exports来导出模块成员,那么最终导出的结果将是一个空对象。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)