Node.js module.exports的目的是什么,你如何使用它?

2022-08-29 22:00:13

Node.js的目的是什么,你如何使用它?module.exports

我似乎找不到任何关于这方面的信息,但它似乎是Node中相当重要的一部分.js正如我经常在源代码中看到的那样。

根据 Node.js 文档

模块

对当前 .特别是与导出对象相同。有关详细信息,请参阅。modulemodule.exportssrc/node.js

但这并没有真正的帮助。

这到底是做什么的,一个简单的例子是什么?module.exports


答案 1

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

变量最初设置为同一个对象(即它是一个速记“别名”),因此在模块代码中,您通常会这样编写:exports

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

导出(或“公开”)内部作用域的函数和 .myFunc1myFunc2

在调用代码中,您将使用:

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

其中,最后一行显示 的结果(通常)只是一个可以访问其属性的普通对象。require

注意:如果您覆盖,那么它将不再引用.因此,如果您希望为其分配新对象(或函数引用),则还应该将该新对象分配给exportsmodule.exportsexportsmodule.exports


值得注意的是,添加到对象的名称不必与要添加的值的模块内部作用域名称相同,因此您可以:exports

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

其次:

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

答案 2

这个问题已经得到了回答,但我想补充一些澄清...

您可以同时使用 和 将代码导入到应用程序中,如下所示:exportsmodule.exports

var mycode = require('./path/to/mycode');

您将看到的基本用例(例如在ExpressJS示例代码中)是您在.js文件中设置对象的属性,然后使用该文件导入exportsrequire()

因此,在一个简单的计数示例中,您可以:

(计数器.js):

var count = 1;

exports.increment = function() {
    count++;
};

exports.getCount = function() {
    return count;
};

...然后在您的应用程序(web.js或任何其他.js文件中):

var counting = require('./counter.js');

console.log(counting.getCount()); // 1
counting.increment();
console.log(counting.getCount()); // 2

简单来说,您可以将所需的文件视为返回单个对象的函数,并且可以通过将属性(字符串,数字,数组,函数等)添加到返回的对象中,方法是将它们设置为 。exports

有时,您希望从调用返回的对象是可以调用的函数,而不仅仅是具有属性的对象。在这种情况下,您还需要设置 ,如下所示:require()module.exports

(sayhello.js):

module.exports = exports = function() {
    console.log("Hello World!");
};

(应用程序.js):

var sayHello = require('./sayhello.js');
sayHello(); // "Hello World!"

导出和 module.export 之间的区别在这里得到了更好的解释。