module.exports vs export in Node.js
我在 Node.js 模块中发现了以下合约:
module.exports = exports = nano = function database_module(cfg) {...}
我想知道这里使用两者之间的区别是什么,以及为什么两者都使用。module.exports
exports
我在 Node.js 模块中发现了以下合约:
module.exports = exports = nano = function database_module(cfg) {...}
我想知道这里使用两者之间的区别是什么,以及为什么两者都使用。module.exports
exports
尽管问题很久以前就已经得到回答和接受,但我只想分享我的2美分:
你可以想象,在文件的最开头有类似的东西(只是为了解释):
var module = new Module(...);
var exports = module.exports;
因此,无论您做什么,请记住,当您从其他地方需要该模块时,不会从您的模块返回。module.exports
exports
因此,当您执行以下操作时:
exports.a = function() {
console.log("a");
}
exports.b = function() {
console.log("b");
}
您正在向对象添加 2 个函数和哪些点,因此返回的结果将是:a
b
module.exports
typeof
object
{ a: [Function], b: [Function] }
当然,如果您在此示例中使用而不是 ,则将获得相同的结果。module.exports
exports
在这种情况下,您希望自己表现得像导出值的容器。然而,如果您只想导出构造函数,那么您应该了解一些关于使用或;(再次记住,当您需要某些东西时,将返回,而不是)。module.exports
module.exports
exports
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
exports
module.exports
module.exports
{}
来自另一个主题的接受答案也应该有所帮助:JavaScript是否通过引用传递?
设置允许在 时像调用函数一样调用函数。简单的设置将不允许导出函数,因为节点会导出对象引用。以下代码不允许用户调用该函数。module.exports
database_module
required
exports
module.exports
以下操作不起作用。
exports = nano = function database_module(cfg) {return;}
如果设置了 module.export,
则以下操作将起作用。
module.exports = exports = nano = function database_module(cfg) {return;}
安慰
var func = require('./module.js');
// the following line will **work** with module.exports
func();
基本上,node.js不会导出当前引用的对象,而是导出最初引用的对象的属性。虽然Node.js确实导出了对象引用,允许您像调用函数一样调用它。exports
exports
module.exports
它们同时设置和以确保不引用先前导出的对象。通过设置两者,您可以将其用作速记,并避免以后出现潜在的错误。module.exports
exports
exports
exports
使用而不是保存字符并避免混淆。exports.prop = true
module.exports.prop = true