将键添加到readFile中的对象

时间:2015-12-02 00:30:35

标签: javascript node.js gulp

我正在通过nodegulp学习我的方法并试图做一些可能已经有解决方案的事情但我正在做这个学习练习。我的想法是,我想扫描目录中的所有文件,读取文件并查找gulp.task行,读入任务名称及其上方的注释。此信息将用于生成一个对象,然后发送到文件,以便gulp-list可以读取某些内容。

我在阅读文件时试图将对象添加到对象中。到目前为止,我没有尝试过,只能为对象添加键和值。

你能给予的任何帮助都会很棒。此外,如果你知道另一个(可能更容易的方式),我真的很想听。我看过gulp-task-list,但这似乎不支持我想要使用的多文件方法。

var gulp = require('gulp')
    fs = require('fs');

var path = './gulp/tasks';
var taskList = {};

// DESC: Rebuilds the list
gulp.task('build:list', function() {
    fs.readdir(path, function(err, files) {
        if (err) throw err;
        files.forEach(function (file) {
            fs.readFile(path+'/'+file, function(err, data) {
                if (err) throw err;
                lines = data.toString().split("\n");
                lines.forEach(function (item, index, array) {   
                    if (match = item.match(/^gulp\.task\(\'(.*)\'/)) {
                        console.log(match[1]);
                        taskList[match[1]] = true;
                    }
                })
            });
        })
    })
    console.log(taskList);
});

1 个答案:

答案 0 :(得分:0)

所以我找到了一个解决方案,我发现在异步函数中可能无法将变量更改为范围。我不完全确定为什么,但我确信随着时间的推移我会学到这一点,除非有人想指出我正确的方向。

我的解决方案,包括写出JSON文件

var gulp = require('gulp')
    fs = require('fs')
    gutil = require('gulp-util');

var path = './gulp/tasks';
var taskList = {};

// Rebuilds the task list
gulp.task('build:list', function() {
    files = fs.readdirSync(path);
    files.forEach(function (file) {
        var contents = fs.readFileSync(path+'/'+file);
        var lines = contents.toString().split("\n");
        lines.forEach(function (item, index, array) {   
            if (match = item.match(/^gulp\.task\(\'(.*?)\'/)) {
                taskList[match[1]] = array[index - 1];
            }
        })
    });
    fs.writeFileSync('./tasks.json', JSON.stringify(taskList));
    gutil.log("Task list built");
});

我想到的第二个解决方案可能要容易得多,我想也许我可以读取每个文件并将所有文件连接成一个文件然后可能替换gulpfile.js文件然后可能允许我使用其他工具来获取所有任务名称和描述。或者可能将文件连接在一起然后处理多个文件而不是处理多个文件。如果我想出其中一个解决方案,我会更新。