2013-12-15 116 views
0

我是Node.js的新手,我正在寻找关于如何将不同的.md文件编译在一起的指导。编译来自github的文件

我下载了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... 
+0

串联文件名是不会让你多! –

+0

@LightnessRacesinOrbit,谢谢你看这个。我明白这一点,但发布“JavaScript的孩子思维”,因为这是我今天的知识允许我。 ʘ‿ʘ你能否以更好的方式指出我? – Rikard

+0

@LightnessRacesinOrbit,在我的文章中增加了一个'fs.readFile()'来分享我的思考/知识对于舞台的位置。 – Rikard

回答

1

这是离线处理,所以你可以使用fs.Sync()来做比异步功能更容易的工作。

请注意,如果您编写Web应用程序,异步是必须的,异步帮助避免应用程序阻止。

您还需要了解递归。

您可以从下面的代码学习:

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');