可当做面试题

Node.js中的`module.exports`的作用是什么? 应该如何使用?

coding2live 2021-01-28 09:50:17 159

Node.js中的module.exports的作用是什么? 应该如何使用?

我经常在node的源码中看到这个module.exports,所以它应该是node中很重要的一个知识点。但是我没找到关于它的文档啥的…

Node.js的文档中提到如下内容:

module

A reference to the current module. In particular module.exports is the same as the exports object. See src/node.js for more information.

==module.exports==的作用到底是什么,有大佬可以给出一个例子吗?

以下答案仅供参考

module.exports是作为require调用结果的实际返回的对象。

使用exports导出的变量,会被初始化到同一个对象中,所以在模块中,你可以这么写:

let myFunc1 = function() { ... };
let myFunc2 = function() { ... };
exports.myFunc1 = myFunc1;
exports.myFunc2 = myFunc2;

导出(或 “暴露出”)模块内的函数myFunc1myFunc2

然后,在调用的时候,可以这么使用:

const m = require('./mymodule');
m.myFunc1();

注意: 如果你覆盖了exports,那它就不会再指向module.exports

因此,如果你打算给exports分配一个新对象(或函数引用),那么你也应该把这个新对象分配给module.exports

另外还有就是,添加到exports对象中的名称不必与模块内部作用域名称相同,如同下面的例子:

let myVeryLongInternalName = function() { ... };
exports.shortName = myVeryLongInternalName;
// add other objects, functions, as required

调用的时候:

const m = require('./mymodule');
m.shortName(); // invokes module.myVeryLongInternalName