import { readdir, stat } from "fs"; import { join } from "path"; import { promisify } from "util"; /** * 此项目的根目录 */ export const projectRoot = join(__dirname, "../../"); /** * 遍历文件 * @param dir * @param fileHandler * @param dirHandler 不传值则默认遍历,传递的函数返回true会遍历,返回false则不继续遍历 */ export const tarvel = async ( dir: string, fileHandler?: (path: string) => Promise, dirHandler?: (path: string, next: () => Promise) => Promise ) => { const children = await promisify(readdir)(dir); for (const iterator of children) { const p = join(dir, iterator); const now = await promisify(stat)(p); if (now.isDirectory()) { const next = async () => await tarvel(p, fileHandler, dirHandler); if (!!dirHandler) { await Promise.resolve(dirHandler(p, next)); } else { await next(); } } if (now.isFile()) { await Promise.resolve(fileHandler?.(p)); } } };