从github编译文件

时间:2013-12-15 12:57:18

标签: javascript node.js github

我是Node.js的新手,我正在寻找有关如何编译不同.md文件的指导。

我下载了this repository,并希望加入/合并/汇编所有.md个文件。所以我想获得一个单独的文件,其中包含每个单独文件的内容,这样我就可以拥有一个包含所有内容的新.md文件。

这就是我在想的......

var docsdir = '../Docs/';
var filesArray = fs.readdir(docsdir, function(err,files){
    if (err) console.error(err);
    // missing how to check if file is a directory
    return files;
}
var newFile;
for(var i = 0; i < files.length; i++){
    fs.readFile(files[i], function read(err, data) {
        if (err) {
            throw err;
        }
        newFile = newFile + data;
    });     
}
fs.writeFile('wholeDocs', newFile)

目录结构在此示例中:

+
|-Docs
   |
   |-folder1
   |    |
   |    |-file1.md
   |
   |
   |-folder2
   |    |
   |    |-file3.md

etc...

1 个答案:

答案 0 :(得分:1)

这是离线处理,因此您可以使用fs.Sync()来完成比异步功能更容易的工作。

请注意,如果您编写Web应用程序,则必须使用async,异步帮助可以避免应用程序阻止。

您还需要知道递归。

您可以从以下代码中学习:

var fs = require('fs'), path = require('path');
function findAllFile(dir, ext) {
    var ret = [];
    function findOneLevel(dir) {
        fs.readdirSync(dir).forEach(function(file) {
            var name = path.join(dir, file);
            var stat = fs.statSync(name);
            if (stat.isDirectory()) {
                findOneLevel(name);
            } else if (stat.isFile() && path.extname(name).toLowerCase() === ext) {
                ret.push(name);
            }
        });
    }
    findOneLevel(dir);
    return ret;
}
function concatAllMd(dir, outFile) {
    var contents = [];
    findAllFile(dir, '.md').forEach(function(file) {
        contents.push(fs.readFileSync(file, 'utf8'));
    })
    fs.writeFileSync(outFile, contents.join('\n'));
}

// use
concatAllMd('Docs', 'output.md');