Javascript – 在NodeJS中构build助手函数的最佳方式

我正在尝试为我的NodeJS项目build立一套utils。 这些助手将包括:文本使用(如子串,控制台日志等),以及更多具体的助手,如parsing推文的文本。

所以我试图把模块分成不同的文件,并且清楚地知道每个东西是什么意思。

例如,我想实现这一点:

var helpers = require("helpers"); var Utils = new helpers.Utils(); // working with text Utils.text.cleanText("blahblalh"); // working with a tweet Utils.twitter.parseTweet(tweet); 

正如你所看到的,我正在使用Utils来处理不同的事情,通过调用非常具体的方法和子方法。

我试图理解inheritance是如何在这里工作的,但是我有点迷茫。

这就是我正在做的(一些粗略的示例代码):

//node_modules/helpers/index.js

 var Text = require('./text'); var Twitter = require('./twitter'); function Utils() { } Utils.prototype.text = { cleanText: function(text) { Text.cleanText(text); } }; Utils.prototype.twitter = { parseTweet(tweet) { Twitter.parseTweet(tweet); } }; 

//node_modules/helpers/text.js

 function Text() { } Text.prototype.cleanText = function(text) { if (typeof text !== 'undefined') { return text.replace(/(\r\n|\n|\r)/gm,""); } return null; }; module.exports = Text; 

//node_modules/helpers/twitter.js

 function Twitter() { }; Twitter.prototype.parseTweet = function(data) { return data; }; module.exports = Twitter 

这是一个正确的方法。 我做错了什么,或者会减慢演出等?

我对Node很新,我想以正确的方式开始。

为了澄清我对你的post的理解,我看到两个问题:

  • 如何构造文件中的代码/方法,代表一类实用函数的文件
  • 如何将这些分类文件组织到一个更大的库中

在一个类别内构build方法

而不是制作对象的所有特定于类别的函数方法(例如Twitter或Text),您可以将函数导出到以它们命名的文件中。 由于看起来你正在传递你想要使用的数据,所以没有必要为一些空类创build函数实例方法。

如果您的Twitter或文本的使用模式通常有你想保持状态的类variables,并且你想要实例化文本或Twitter对象来使用你的例子,那么我想这是适当的。 当我在我的项目中安装util lib时,它通常是一堆组成模块的导出函数,而不是导出的JavaScript类。

提供一个由基于文本的效用函数组成的text.js文件的例子可能如下所示:

 module.exports = { cleanText:function(text) { // clean it and return }, isWithinRange(text, min, max) { // check if text is between min and max length } } 

或者,你可以这样做:

 exports.cleanText = function(text) { // clean it and return } exports.isWithinRange = function (text, min, max) { // check if text is between min and max length } 

构build实用程序类别文件以创build更大的实用程序库

就组织效用方法而言,卢卡的例子很好。 我已经组织了一些类似的这样的:

 utils-module/ lib/ text.js <-- this is the example file shown above twitter.js test/ index.js 

其中index.js做类似的事情

 var textUtils = require('./lib/text'); exports.Text = textUtils; 

然后,当我想在我的节点API中使用util lib中的一些用户模型时,它很简单:

 /* * Dependencies */ var textUtils = require('path/to/lib').Text; /* * Model */ function User() {} /* * Instance Methods */ User.prototype.setBio = function(data) { this.bio = textUtils.cleanText(data); } module.exports = User; 

希望有所帮助。 当我第一次学习的时候,看看stream行的,受人尊敬的图书馆是非常有帮助的,看看有多less有经验的node / javascript开发者在做什么。 那里有那么多好(坏)的!

最好,

克雷格

你可以用lodash看到一个utils库的例子。

Lodash是一个像underscorejs这样的工具库。 这个库有像你一样的文件结构。

它将function分类。 每个类别都是一个带有index.js文件的文件夹,该文件包含到该类别的每个函数的命名空间(文字对象)中!

 Lodash/ Objects/ Function1.js Functions2.js .... Index.js Array/ Function1.js ... Index.js 

然后在你的代码中你可以这样做:

 var objectsUtils = require("lodash/objects"); var foreach = require("lodash/array/each"); 

您可以创build一个类似的文件系统结构以获得更大的灵活性。 您可以要求整个库,只有一个命名空间或一个函数。

这对性能更好,因为您只使用您所需的内存使用增益。

实用程序库“强制”你拉一大堆你不一定需要的代码。

我编写了一个名为Bit的开源项目,它可以让您在处理项目时创build可重用的组件,然后在整个存储库中单独使用它们。

以下是Bit开源社区中心上Javascript实用函数的示例集合 。

希望这可以帮助。