Node 遍历目录输出树形文件目录结构
使用 nodejs 的递归读取文件目录下的所有文件,生成树形文件目录结构。
const fs = require('fs');
const path = require('path');
const getCatalog = (dir) => {
let filesNameArr = []
// 用个hash队列保存每个目录的深度
let mapDeep = {}
mapDeep[dir] = 0
// 先遍历一遍给其建立深度索引
const getMap = (dir, curIndex) => {
let files = fs.readdirSync(dir) //同步拿到文件目录下的所有文件名
files.map(function (file) {
//let subPath = path.resolve(dir, file) //拼接为绝对路径
let subPath = path.join(dir, file) //拼接为相对路径
let stats = fs.statSync(subPath) //拿到文件信息对象
// 必须过滤掉node_modules文件夹
if (file != 'node_modules') {
mapDeep[file] = curIndex + 1
if (stats.isDirectory()) { //判断是否为文件夹类型
return getMap(subPath, mapDeep[file]) //递归读取文件夹
}
}
})
}
getMap(dir, mapDeep[dir])
const readdirs = (dir, folderName, myroot) => {
let result = { //构造文件夹数据
path: dir,
title: path.basename(dir),
type: 'directory',
deep: mapDeep[folderName]
}
let files = fs.readdirSync(dir) //同步拿到文件目录下的所有文件名
result.children = files.map(function (file) {
//let subPath = path.resolve(dir, file) //拼接为绝对路径
let subPath = path.join(dir, file) //拼接为相对路径
let stats = fs.statSync(subPath) //拿到文件信息对象
if (stats.isDirectory()) { //判断是否为文件夹类型
return readdirs(subPath, file, file) //递归读取文件夹
}
return { //构造文件数据
path: subPath,
name: file,
type: 'file'
}
})
return result //返回数据
}
filesNameArr.push(readdirs(dir, dir))
return filesNameArr
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
调用方法
let dir = path.join(__dirname, './src');
getCatalog(dir)
1
2
2
输出
上次更新: 2024/01/30, 00:35:17
- 01
- Node与GLIBC_2.27不兼容解决方案08-19
- 02
- Git清空本地文件跟踪缓存08-13