gpt4 book ai didi

javascript - module.exports 与 Node.js 中的导出

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:38 25 4
gpt4 key购买 nike

我在 Node.js 模块中找到了以下合约:

module.exports = exports = nano = function database_module(cfg) {...}

我想知道 module.exportsexports 之间有什么区别以及为什么在这里使用两者。

最佳答案

尽管问题早已得到解答和接受,但我只想分享我的 2 美分:

您可以想象在文件的开头有类似的内容(仅用于解释):

var module = new Module(...);
var exports = module.exports;

enter image description here

因此,无论您做什么,请记住,当您从其他地方需要该模块时,将从您的模块返回 module.exports 而不是 exports

所以当你做类似的事情时:

exports.a = function() {
console.log("a");
}
exports.b = function() {
console.log("b");
}

您要向 module.exports 指向的对象添加 2 个函数 ab,因此返回结果的 typeof 将是一个 object : { a: [Function], b: [Function] }

当然,如果您在此示例中使用 module.exports 而不是 exports,则会得到相同的结果。

在这种情况下,您希望 module.exports 表现得像导出值的容器。然而,如果您只想导出构造函数,那么您应该了解有关使用 module.exportsexports 的一些知识;(再次记住,当您需要某些内容时,将返回 module.exports,而不是 export)。

module.exports = function Something() {
console.log('bla bla');
}

现在typeof返回的结果是'function',您可以要求它并立即调用,如下所示:
var x = require('./file1.js')(); 因为你将返回结果覆盖为函数。

但是,使用 exports 你不能使用如下内容:

exports = function Something() {
console.log('bla bla');
}
var x = require('./file1.js')(); //Error: require is not a function

因为有了 exports,引用不再指向module.exports 指向的对象,因此 exportsmodule.exports 之间不再有关系。在这种情况下,module.exports 仍然指向将返回的空对象 {}

另一个主题中接受的答案也应该有所帮助: Does JavaScript pass by reference?

关于javascript - module.exports 与 Node.js 中的导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50519491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com