详解 Node.js 中 exports 和 module.exports 的区别
在 Node.js 中,exports
和 module.exports
常常会让初学者感到混乱。它们都可以用于导出模块,但是它们之间有什么区别呢?
简介
在 Node.js 中,每个文件都被视为一个模块。当我们在一个文件中使用 require()
加载另一个文件时,Node.js 会自动执行该文件,并将其返回值作为 require()
的返回值。
在 Node.js 中,我们要导出一个模块,可以在文件的末尾使用 exports
或 module.exports
对象来添加属性或方法。
-- --------- ------------------ - ---------- - -- --- -- -- ------ -------------- - - ----------- ---------- - -- --- -- ----------- ------- --
然而,这两种语法有一个微妙的差别,这就是本文将要解释的内容。
区别
在 Node.js 中,每个模块都会生成一个名为 module
的对象。这个对象包含了当前模块的信息和方法,其中 module.exports
是最重要的属性之一。
当我们使用 exports
导出一个模块时,实际上是在 module.exports
上添加一个属性或方法。例如:
------------------ - ---------- - -- --- --
相当于:
------------------------- - ---------- - -- --- --
这说明 exports
只是 module.exports
的一个引用。如果你尝试直接给 exports
赋值,例如:
------- - - ----------- ---------- - -- --- - --
那么,exports
就指向了一个新的对象,而不再是 module.exports
。这样导出的模块将会变成一个空对象。
同样地,如果你在使用 module.exports
导出一个模块时,也可以使用 exports
来给它添加属性或方法。例如:
------------------------- - ---------- - -- --- -- -- --- ------------------ - ---------- - -- --- --
但是,在使用 module.exports
导出一个模块时,不能直接给 exports
赋值。这是因为 exports
对象不再是 module.exports
的一个引用。例如:
-------------- - - ----------- ---------- - -- --- - -- -- ------- ---- ----------------------- ----------------------- - ---------- - -- --- --
如何选择
在实际开发中,我们应该如何选择使用 exports
还是 module.exports
呢?
如果我们只需要导出一个单独的属性或方法,可以使用 exports
。
------------------ - ---------- - -- --- --
但是,如果我们需要导出一个复杂的对象,例如一个类或一个构造函数,则需要使用 module.exports
。
-------- --------- - -- --- - -------------- - --------
需要注意的是,一旦使用了 module.exports
,就不能再使用 exports
。
总结
在 Node.js 中,exports
和 module.exports
都可以用于导出模块,但是它们之间有微妙的差别。exports
只是 module.exports
的一个引用,如果你尝试直接给 exports
赋值,就会出现问题。如果我们只需要导出一个单独的属性或方法,可以使用 exports
。但是,如果我们需要导出一个复杂的对象,例如一个类或一个构造函数,则需要使用 module.exports
。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/1956