2012-11-08 81 views
1

我希望找出编写Node.js模块的最佳实践,特别是用于代码分离的JavaScript模式类型。Node.js模块插件

一种风格我一直在使用,是这样的:

var Something; 

Something = (function() { 

    function Something() { 
    } 

    Something.prototype.some = function() { 

    } 

    return Something; 

})(); 

module.exports = Something; 

另一种风格是:

module.exports = { 
item: "one", 
some: function() { 

}, 
another: function() { 

} 
} 

是否有任何理由为什么第二种方法就不会被告知,在节点。 JS?或者是否有另一种格式是优先选择的,这些优势会是什么?

谢谢!

+3

没有理由将你的'Something'构造函数封装在匿名函数中。以这种方式使用匿名函数的目的是为了防止命名空间污染,但Node中的模块已经限制在它们自己的命名空间中。 – lanzz

+0

谢谢你,好的提示,将删除。 – dzm

回答

1

您遇到了使用'this'关键字的问题。你必须使用哪个,而不是'Something'。所以Something.some()你可以运行...但是如果你想在底部运行它,你必须运行this.run()。其他功能中的这种变化的范围可能会变得混乱。

1

有几种变体,包括将属性直接分配给exports,将新对象文字分配给module.exports等几个。大多数情况下,它们只是语法糖或语法替代品,它们完全相同。我的个人偏好是尽可能多地将我的代码留给未受污染的纯JS,并将CommonJS成语分开。所以,我做的:

function myFunction() { 

} 

var MY_STRING = "Forty-two"; 


module.exports = { 
    myFunction: myFunction, 
    MY_STRING: MY_STRING 
}; 

这是一个有点样板-γ和容易维护的错误,但我喜欢它的替代品,因为我真的不喜欢把我的整个代码洒在CommonJS的模块级名称(模块,出口)。 CoffeeScript使最后一部分更容易,因为你可以这样做:

module.exports = { 
    myFunction 
    MY_STRING 
}