// description: list files in specific folder
var fs = require('fs');
var readdir = promisify(fs.readdir);
var stat = promisify(fs.stat);
var readFile = promisify(fs.readFile);
var filesObj = {}, inPathArr = ["src", "src/utils", "src/i18n"];
function promisify(fn) {
return function () {
var args = arguments;
return new Promise(function (resolve, reject) {
[].push.call(args, function (err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
fn.apply(null, args);
});
}
}
function addFileToObj(obj, pArr, name) {
const key = pArr.shift();
if (pArr.length) {
if (!obj[key] || obj[key].constructor != Object) {
obj[key] = {};
addFileToObj(obj[key], pArr, name);
} else {
obj[key] = addFileToObj(obj[key], pArr, name);
};
} else {
obj[key] = name;
};
return obj;
};
function getFilePath(file, callback) {
return readdir(file).then(function (files) {
files = files.map(function (item) {
var fPath = file + '/' + item;
return stat(fPath).then(function (stats) {
if (stats.isDirectory()) {
callback('folder', item, fPath);
return getFilePath(fPath, callback);
} else {
if (!/^(\.github|\.vscode|node_modules|dist|fileList\.json)$/.test(item)) {
return readFile(fPath, 'utf8').then(function (content) {
var des, firstLine;
if (content && content.split(/\n|\r\n/).length > 0) {
firstLine = content.split(/\n|\r\n/)[0];
if (/description:/.test(firstLine)) {
des = firstLine.replace(/^.*description:\s?/, "").replace(/\s*$/, "");
};
};
callback("file", item, fPath, des);
});
};
};
});
});
return Promise.all(files);
});
}
function listFiles(arr) {
arr.forEach(path => {
getFilePath(path, function (type, item, fPath, des) {
var tmpArr = fPath.split("/");
addFileToObj(filesObj, tmpArr, des ? des : item);
}).then(function () {
var str = JSON.stringify(filesObj);
fs.writeFile(`${path}/fileList.json`, str, function (err) {
if (err) {
return console.log(err);
};
console.log("success");
});
}).catch(function (err) {
console.log("error",err);
});
});
}
listFiles(inPathArr.slice(0, 1));
用node列出特定文件夹内的文件
最新推荐文章于 2023-03-02 16:20:02 发布