Node.JS 官方的模块只提供了列出某目录所有文件的命令 fs.readdir,要用异步的方式遍历一个目录并记录所有文件的内容,需要仔细处理。下面的代码参考了后面列出的资料,并增加了排除某些文件的功能:
var fs = require('fs');
function walkInto(dir, excludes, back) {
var result = [];
fs.readdir(dir, function(err, files){
if (err) back(err);
files = files.filter(function(value){
return (value[0] != '.') && (excludes.indexOf(value) == -1);
});
var pending = files.length;
if (!pending) return back(null, result);
files.forEach(function(file){
fs.stat(dir + '/' + file, function(err, stats) {
if (stats.isFile()) {
result.push(dir + '/' + file);
if (!--pending) back(null, result);
}
if (stats.isDirectory()) {
walkInto(dir + '/' + file, [], function(err, res){
result = result.concat(res);
if (!--pending) back(null, result);
})
}
});
});
});
}
参考资料:
[1] Stack Overflow - node.js fs.readdir recursive directory search
[2] Stack Overflow - Recursivly read a directory in NodeJS