@wujianfu/scan-dir-sync
Version:
扫描目录,支持遍历,支持过虑
67 lines (55 loc) • 1.78 kB
JavaScript
const fs = require('fs');
const path = require('path');
function scanDirSync(dirPath, options) {
const defaultOptions = {
recursive: true,
ignore: [],
include: [],
exclude: [],
};
const { recursive, ignore, include, exclude } = Object.assign(
defaultOptions,
options,
);
const arr = [];
readDir(dirPath, recursive, ignore, include, exclude);
return arr;
function readDir(dirPath, recursive, ignore, include, exclude) {
const files = fs.readdirSync(dirPath);
files.forEach((file) => {
const fullPath = path.join(dirPath, file);
// 如果是目录并且满足条件则继续遍历
if (
fs.statSync(fullPath).isDirectory() &&
!ignore.includes(file) &&
recursive
) {
return readDir(fullPath, recursive, ignore, include, exclude);
}
// 如果是文件且满足条件则存入数组
if (fs.statSync(fullPath).isFile()) {
const extName = path.extname(fullPath); // 文件扩展名
// 是否在ignore列表中
const inIgnore = ignore.some((item) => {
return item === file;
});
// 是否在include列表中
const inInclude =
include.length === 0
? true
: include.some((item) => {
return item.toLowerCase() === extName.toLowerCase();
});
// 是否在exclude列表中
const inExclude = exclude.some((item) => {
return item.toLowerCase() === extName.toLowerCase();
});
// 存入数组
if (!inIgnore && !inExclude && inInclude) {
arr.push(fullPath);
}
}
});
}
}
module.exports = scanDirSync;