我可以在模块中添加方法吗?

时间:2016-01-29 09:18:23

标签: node.js

我在节点模块中有一个功能:

//app.js
var minify = require("./minify.js")(app, express);

//minify.js
module.exports = function (app, express) {

    ...

    function fileList(dir) {
        return fs.readdirSync(dir).reduce(function(list, file) {
            var name = path.join(dir, file);
            var isDir = fs.statSync(name).isDirectory();
            var isJs = name.endsWith('.js');
            return list.concat(isDir ? fileList(name) : isJs ? [name] : [] );
        }, []);
    }
   ...
};

我想将其更改为一种方法,使我的代码更具可读性。

我尝试了以下操作,但没有成功:

module.fileList = function(dir) {
    return fs.readdirSync(dir).reduce(function(list, file) {
        var name = path.join(dir, file);
        var isDir = fs.statSync(name).isDirectory();
        var isJs = name.endsWith('.js');
        return list.concat(isDir ? fileList(name) : isJs ? [name] : [] );
    }, []);

module.prototype.fileList = function(dir) {
    return fs.readdirSync(dir).reduce(function(list, file) {
        var name = path.join(dir, file);
        var isDir = fs.statSync(name).isDirectory();
        var isJs = name.endsWith('.js');
        return list.concat(isDir ? fileList(name) : isJs ? [name] : [] );
    }, []);
}

我希望能够调用方法usint this.fileList或minify.filelist,具体取决于我的范围。

2 个答案:

答案 0 :(得分:1)

您可以从导出的函数返回对象:

//minify.js
function fileList(dir) {
    // ...
}

module.exports = function(app, express) {
    //...
    return {
        fileList: fileList
    };
}

//app.js
var minify = require("./minify.js")(app, express);
minify.fileList();

答案 1 :(得分:0)

我认为这种方式更容易:

minify.js

module.exports = {

    fileList: function(app, express) {
        // your code here
    },

    Method2: function() {
        // another code here
    }

}

你可以像这样使用它:

app.js

var minify = require('minify');

minify.fileList(app, express);
minify.Method2();