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