我对module.exports感到困惑。据我所知module.exports
是一个暴露给其他模块的对象,
exports=module.exports={}
但是在node.js的morgan包的index.js中我找到了这个。
module.exports = morgan
module.exports.compile = compile
module.exports.format = format
module.exports.token = token
morgan
,compile
,format
和token
都是功能。
你能解释一下这里发生的事吗?如何将一个函数(morgan)分配给module.exports?执行第一行后,module.exports是一个函数而不是JSON对象吗?
答案 0 :(得分:3)
Node模块基本上是这样的:
var module = {
exports: {}
};
(function (exports, require, module, __filename, __dirname) {
// your module code here
})(module.exports, require, module, __filename, __dirname);
var exported = module.exports;
默认情况下,exports
和module.exports
都指向同一个对象。您可以照常向对象添加属性。但是,如果要返回函数或其他对象而不仅仅是默认的标准对象,该怎么办?
在这种情况下,您可以将module.exports
设置为其他内容,这将是新导出的对象。
module.exports = function() {};
当然,该功能也可以具有属性,因此您的代码就像这样:
module.exports = function(){};
module.exports.compile = function() {};
module.exports.format = function() {};
module.exports.token = function() {};
这相当于:
var morgan = function() {};
var compile = function() {};
var format = function() {};
var token = function() {};
morgan.compile = compile;
morgan.format = format;
morgan.token = token;
module.exports = morgan;
如何将一个函数(morgan)分配给module.exports?执行第一行后,module.exports是一个函数而不是JSON对象吗?
是的,module.exports
将是一个函数,代替默认对象(但这里没有JSON,JSON不是JavaScript对象,而是编码格式)。
答案 1 :(得分:1)
您可能需要阅读此答案以获得更深入的解释:
What is the purpose of node js module exports and how do you use it?
Morgan只是向要导出的模块添加参数(在本例中为compile
,format
和token
。当您在应用程序中使用{{1}之类的模块时然后,您可以调用morgan = require('morgan')
来返回附加到对象的格式。
希望能稍微清理一下!
答案 2 :(得分:0)
module.exports是一个暴露给其他模块和文件的对象。这允许以方便的方式导出变量,函数和更多javascript功能。
正如您所见here,当您将任何变量初始化为{}时,您正在初始化一个对象。
一个对象可以包含变量和函数,这是使Javascript非常酷的事情之一。您可以轻松地将具有函数的复杂对象作为参数传递,并执行真正干净的代码。
因此,简短的故事,将module.exports视为暴露给其他模块和具有变量和函数的文件的对象。就像将面向对象的对象作为Java或Ruby中的参数传递一样。
这里很容易解释:Read More
答案 3 :(得分:0)
你能解释一下这里发生的事吗?
正在发生转让声明。
// path-to-my-module.js
module.exports = morgan
module.exports.compile = compile
module.exports.format = format
module.exports.token = token
对于这4个陈述中的每一个,都有一个赋值语句。查看第一行module.exports = morgan
,这意味着module.exports
对象将具有名为morgan
的属性,其值为标识符的值morgan
所以当你像这样使用它时:
var m = require('./path-to-my-module.js');
console.log(m.morgan);
console.log(m);