node.js 中 module.exports= 函数的含义

Posted

技术标签:

【中文标题】node.js 中 module.exports= 函数的含义【英文标题】:meaning of module.exports= function in node.js 【发布时间】:2015-10-08 03:34:51 【问题描述】:

我正在使用 node.js 迈出第一步,显然我尝试做的第一件事就是从模块中导出一些数据,所以我尝试了这个简单的案例:

dummy.js:

var user = "rally";

module.exports = 
  user:user
;

并且比这样的不同文件需要它:

var dummy = require('./dummy.js');
console.log(dummy.user); // rally

到目前为止一切顺利,一切正常,但现在我深入研究了模块开头有此定义的代码:

module.exports = function(passport,config, mongoose) 

我不明白它的含义以及如何使用它。 只是为了理解我在这个抽象函数中定义了一些变量,但无法从任何其他文件中获取它们的值。 知道如何从这样定义的模块中导出变量..?所以例如我可以需要这个模块并获取“虚拟”变量并在不同的文件中使用它

module.exports = function(passport,config, mongoose) 
var dummy = "Dummy";

【问题讨论】:

我自己经常想知道这一点。 module.exports 到底是什么?在 Gruntfile.js 中已经看到了很多 ***.com/questions/5311334/…、***.com/questions/6116960/… 或 ***.com/questions/7137397/… 的可能重复项 还有sitepoint.com/understanding-module-exports-exports-node-js 【参考方案1】:

它的工作方式与第一个完全相同,只是它导出的是函数而不是对象。

导入模块的模块然后可以调用该函数:

var dummy = require('./dummy.js');
dummy();

知道如何从这样定义的模块中导出变量..?

因为函数只是对象,你也可以给它分配属性:

module.exports = function(passport,config, mongoose) 
module.exports.user = 'rally';

但我认为,如果模块直接导出函数,则不太可能出现这种情况。您最好将函数导出为自己的导出:

exports.login = function(passport,config, mongoose) 
exports.user = 'rally';

【讨论】:

【参考方案2】:

什么是模块?

模块将相关代码封装成单个代码单元。创建模块时,这可以解释为将所有相关功能移动到文件中。

// dummy.js
var exports = module.exports = ;

dummy.js 的封装代码可以在其他文件中使用时,它的实用性会增加。这是通过使用exports 来实现的。

它们是如何被调用的?

您可以在 module.exports 块之外声明您的函数。导出中的函数可以像变量或任何其他对象一样被调用。

示例

//dummy.js

var myVariable = "foo";
var myFunction = function()
     //some logic
;

module.exports

      myVariable : myVariable,
      myFunction : myFunction,

      myVariableTypeTwo : "bar",
      myFunctionTypeTwo : function () 
           //some logic
      


我们现在可以将 dummy.js 的公开可用方法作为任何 js 文件的属性访问。

var dummy = require('./dummy.js');

dummy.myVariable; //foo
dummy.myFunction();

dummy.myVariableTypeTwo; //bar
dummy.myFunctionTypeTwo();

注意

在上面的代码中,我们可以用 export 替换 module.exports 并获得相同的结果。如果这看起来令人困惑,请记住 export 和 module.exports 引用的是同一个对象。

【讨论】:

module.exports 语法无效。

以上是关于node.js 中 module.exports= 函数的含义的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 中声明多个 module.exports

node.js 中 module.exports= 函数的含义

Node.js中exports与module.exports的区别

node.js模块中exports和module.exports的区别

Node.js中exports与module.exports的区别

Node.js学习笔记(一)module.exports与exports