[英]Nodejs module exports confusion
我对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
都是函数。
您能解释一下这里发生了什么吗? 一个函数(摩根)如何分配给module.exports? 在执行第一行之后,module.exports是函数而不是JSON对象吗?
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;
一个函数(摩根)如何分配给module.exports? 在执行第一行之后,module.exports是函数而不是JSON对象吗?
是的, module.exports
将是一个函数,代替默认对象(但是这里没有JSON,JSON不是JavaScript对象,而是一种编码格式)。
您可能需要阅读以下答案以获得更深入的说明:
Morgan只是向正在导出的模块中添加参数(在这种情况下为compile
, format
和token
。当您使用morgan = require('morgan')
类的东西在应用程序中需要该模块时,您可以调用morgan.format
返回附加到对象的格式。
希望能把事情弄清楚!
您能解释一下这里发生了什么吗?
分配声明正在发生。
// 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.