如何正确地要求节点模块,导出其中的所有功能

时间:2013-09-04 14:45:22

标签: javascript node.js

我有一个stats.js文件。

它的内容是

(function () {
    func1 = function () {

    }
    func2 = function () {

    }

    module.exports = this;

}).call(this);

当我做的时候,很明显

var stats = require("./stats");

我应该可以使用stats.func1,stats.func2获取func1和func2,对吧?

嗯,我不能。 stats对象只是空的。 stats.js中的一些痕迹显示“this”也是一个空对象。

是什么给出了?

2 个答案:

答案 0 :(得分:1)

首先要看this链接。

现在让我们看看您的代码 -

    var stats = require("./stats");
    //My steps - 

    //First Log
    console.log(stats.func1); // returns undefined
    //Second Log
    console.log(global.func1, global === GLOBAL); // returns [Function], true

取消此代码 -
1.在浏览器中,全局对象是window对象 2.在node.js中,它是global对象 3.在模块中定义使用 var的内容只会创建一个范围为module的变量。
4.定义不带 var关键字的内容将在全局范围内创建变量。

因此func1func2在全球范围内定义。将此传递给module.exports将仅传递当前模块对象。

希望它有所帮助,快乐编码!

答案 1 :(得分:0)

不,不应该吗?这种格式与Node.js完成其工作所需的格式完全不同。

“给出什么”是因为你没有读到节点的工作原理。 Node.js不只是“JavaScript”,它是一个具有更丰富的API和特定行为的编程模型。需要使用“module.exports”对象,所以实际阅读如何使用节点是个好主意。

mything.js:

var func3 = function() { ... },
    prop = "something";
...
module.exports = {
  func1: function() { ... },
  func2: function() { ... },
  func3: funct3,
  prop: prop,
  ...
};

与:

相同
var func3 = function() { ... },
    prop = "something",
    ...
    MyLib = {
      func1: function() { ... },
      func2: function() { ... },
      func3: funct3,
      prop: prop,
      ...
    };
...
module.exports = MyLib;

app.js:

var mything = require("mything);