UNPKG

@wujianfu/scan-dir-sync

Version:

扫描目录,支持遍历,支持过虑

67 lines (55 loc) 1.78 kB
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;