Nodejs 模块导出混乱
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对象吗?
module.exports 是暴露给其他模块和文件的对象。这样可以方便地导出变量、函数和更多 javascript 功能。
如您所见 here ,当您将任何变量初始化为 {} 时,您正在初始化一个对象。
对象可以包含变量和函数,这是 Javascript 非常酷的原因之一。您可以轻松地传递带有函数的复杂对象作为参数,并编写真正漂亮的干净代码。
所以,简而言之,将 module.exports 视为一个对象,该对象通过变量和函数暴露给其他模块和文件。就像在 Java 或 Ruby.
中传递一个面向对象的对象作为参数一样
这里很容易解释:Read More
您可能想阅读此答案以获得更深入的解释:
What is the purpose of node js module exports and how do you use it?
Morgan 只是将参数添加到正在导出的模块(在本例中为 compile
、format
和 token
。当您在应用程序中使用类似 morgan = require('morgan')
,然后您可以调用 morgan.format
以 return 附加到对象的格式。
希望一切都清楚一些!
Can you explain whats happening here?
正在执行赋值语句。
// 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
的 属性 及其value 是标识符的值 morgan
所以当你这样使用它时:
var m = require('./path-to-my-module.js');
console.log(m.morgan);
console.log(m);
一个 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
都指向同一个对象。您可以照常向对象添加属性。但是,如果您想要 return 一个函数或其他对象而不只是默认的标准对象怎么办?
在这种情况下,您可以将 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;
How is a function(morgan) assigned to module.exports ? After the first line is executed, is module.exports a function instead of an JSON object?
是的,module.exports
将是一个函数,代替默认对象(但是这里没有 JSON,JSON 不是 JavaScript 对象,而是一种编码格式)。
我对 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对象吗?
module.exports 是暴露给其他模块和文件的对象。这样可以方便地导出变量、函数和更多 javascript 功能。
如您所见 here ,当您将任何变量初始化为 {} 时,您正在初始化一个对象。
对象可以包含变量和函数,这是 Javascript 非常酷的原因之一。您可以轻松地传递带有函数的复杂对象作为参数,并编写真正漂亮的干净代码。
所以,简而言之,将 module.exports 视为一个对象,该对象通过变量和函数暴露给其他模块和文件。就像在 Java 或 Ruby.
中传递一个面向对象的对象作为参数一样这里很容易解释:Read More
您可能想阅读此答案以获得更深入的解释:
What is the purpose of node js module exports and how do you use it?
Morgan 只是将参数添加到正在导出的模块(在本例中为 compile
、format
和 token
。当您在应用程序中使用类似 morgan = require('morgan')
,然后您可以调用 morgan.format
以 return 附加到对象的格式。
希望一切都清楚一些!
Can you explain whats happening here?
正在执行赋值语句。
// 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
的 属性 及其value 是标识符的值 morgan
所以当你这样使用它时:
var m = require('./path-to-my-module.js');
console.log(m.morgan);
console.log(m);
一个 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
都指向同一个对象。您可以照常向对象添加属性。但是,如果您想要 return 一个函数或其他对象而不只是默认的标准对象怎么办?
在这种情况下,您可以将 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;
How is a function(morgan) assigned to module.exports ? After the first line is executed, is module.exports a function instead of an JSON object?
是的,module.exports
将是一个函数,代替默认对象(但是这里没有 JSON,JSON 不是 JavaScript 对象,而是一种编码格式)。