Skip to content

walk

递归遍历目录,获取所有文件路径。

前置依赖

依赖参数

参数名类型说明
deps.existsSyncFileSystem['existsSync']检查文件是否存在
deps.readdirSyncFileSystem['readdirSync']读取目录内容
deps.statSyncFileSystem['statSync']获取文件状态(跟随符号链接)
deps.lstatSyncFileSystem['lstatSync']获取文件状态(不跟随符号链接)
deps.realpathSyncFileSystem['realpathSync']获取真实路径
deps.joinPath['join']路径拼接
deps.sepPath['sep']路径分隔符
deps.posixPath['posix']POSIX 路径对象

环境要求

  • fs: Node.js 文件系统模块
  • path: 路径处理模块
typescript
import fs from 'fs'
import path from 'path'

函数签名

typescript
function walk(
  dir: string,
  options?: WalkOptions,
  deps: WalkDependencies
): string[]

interface WalkOptions {
  filter?: (path: string) => boolean
  maxDepth?: number
  followSymlinks?: boolean
}

interface WalkDependencies {
  existsSync: FileSystem['existsSync']
  readdirSync: FileSystem['readdirSync']
  statSync: FileSystem['statSync']
  lstatSync: FileSystem['lstatSync']
  realpathSync: FileSystem['realpathSync']
  join: Path['join']
  sep: Path['sep']
  posix: Path['posix']
}

参数

参数名类型必填默认值说明
dirstring-要遍历的目录路径
options.filter(path: string) => boolean-过滤函数,返回 false 的路径会被跳过
options.maxDepthnumberInfinity最大递归深度
options.followSymlinksbooleanfalse是否跟随符号链接
depsWalkDependencies-依赖注入对象

返回值

类型说明
string[]所有文件的路径数组(不包含目录)

工作原理

  1. 检查目录:验证目录是否存在
  2. 读取目录:获取目录下的所有项
  3. 遍历每一项
    • 拼接完整路径
    • 获取文件状态(根据 followSymlinks 选项选择 statSync 或 lstatSync)
    • 如果是符号链接:
      • followSymlinks 为 true:解析真实路径并递归
      • followSymlinks 为 false:跳过
    • 如果是目录:
      • 检查深度限制
      • 递归调用 walk
    • 如果是文件:
      • 应用 filter(如果有)
      • 添加到结果数组
  4. 返回所有文件路径

支持过滤、深度限制和符号链接处理,适用于文件批量处理场景。