walk
递归遍历目录,获取所有文件路径。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.existsSync | FileSystem['existsSync'] | 检查文件是否存在 |
deps.readdirSync | FileSystem['readdirSync'] | 读取目录内容 |
deps.statSync | FileSystem['statSync'] | 获取文件状态(跟随符号链接) |
deps.lstatSync | FileSystem['lstatSync'] | 获取文件状态(不跟随符号链接) |
deps.realpathSync | FileSystem['realpathSync'] | 获取真实路径 |
deps.join | Path['join'] | 路径拼接 |
deps.sep | Path['sep'] | 路径分隔符 |
deps.posix | Path['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']
}参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
dir | string | 是 | - | 要遍历的目录路径 |
options.filter | (path: string) => boolean | 否 | - | 过滤函数,返回 false 的路径会被跳过 |
options.maxDepth | number | 否 | Infinity | 最大递归深度 |
options.followSymlinks | boolean | 否 | false | 是否跟随符号链接 |
deps | WalkDependencies | 是 | - | 依赖注入对象 |
返回值
| 类型 | 说明 |
|---|---|
string[] | 所有文件的路径数组(不包含目录) |
工作原理
- 检查目录:验证目录是否存在
- 读取目录:获取目录下的所有项
- 遍历每一项:
- 拼接完整路径
- 获取文件状态(根据 followSymlinks 选项选择 statSync 或 lstatSync)
- 如果是符号链接:
- followSymlinks 为 true:解析真实路径并递归
- followSymlinks 为 false:跳过
- 如果是目录:
- 检查深度限制
- 递归调用 walk
- 如果是文件:
- 应用 filter(如果有)
- 添加到结果数组
- 返回所有文件路径
支持过滤、深度限制和符号链接处理,适用于文件批量处理场景。