path.ts 1017 Bytes
Newer Older
silver47gin's avatar
silver47gin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
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<void>,
  dirHandler?: (path: string, next: () => Promise<void>) => Promise<void>
) => {
  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));
    }
  }
};