在node.js中编写和加载模块的正确方法?

时间:2013-12-10 16:59:46

标签: javascript node.js

目前,我编写了这样的node.js模块:

//MyModule.js
function MyModule() {
  ...somecode
}

MyModule.prototype.someFunc = function() {...}
module.exports = MyModule

然而,当我需要使用模块时,我必须写下这样的东西:

//main.js
var MyModule = require('MyModule');
var myModule = new MyModule();

这看起来非常丑陋。是不是有办法做这样的事情

//main.js
var myModule = require('MyModule').new();

我做错了吗?

3 个答案:

答案 0 :(得分:2)

快速破解不丑的东西

module.js

function MyModule() {
    console.dir('constructor');
}
module.exports = MyModule;

app.js

Function.prototype.new = function () {
    return new this();
};
var MyModule = require('./module.js').new(); // 'constructor'

答案 1 :(得分:1)

如果您的模块仅由函数组成,则可能不需要将其创建为实例 - 只需将模块定义为充满函数的对象。像这样:

var MyModule = {
  prepareHtmlContent: function() {
  },
  autoLoadActionInitiatorFunctions: function() {
  }
};

我建议这样做的原因是你已将对象称为“MyModule”。如果你的意图是专门用它作为“类”,并在需要时实例化它的单独副本,那么你就是按照正确的方式进行的。

答案 2 :(得分:1)

这是我使用的

(function(module) {

    module.myFunction = function() {

    }

    module.createSomeObj = function() {
        return {
           foo: 1,
           bar: 'bar'
        };       
    }

}(module.exports));

用法

var myModule = require('./myModule');

myModule.myFunction();
var myObject = myModule.createSomeObj();