目录结构到对象结构
小于 1 分钟
在项目目录中我有如下目录文件,想将其转化为对象结构:
.
├── bar
│ ├── a
│ │ ├── n1.js
│ │ └── n2.js
│ └── b
│ ├── n1.js
│ └── n2.js
└─── foo
├── a
│ ├── n1.ts
│ └── n2.ts
└── b
├── n1.ts
└── n2.ts
以 n1.js
为例,其内容为:
export default {
m() {
console.log('n1')
},
}
代码实现
const modules = import.meta.glob(['./bar/**/*.js', './foo/**/*.ts'], {
eager: true, // 立即加载这些文件,而不是延迟加载
import: 'default', // 导入模式
})
console.log('🚀 ~ modules:', modules)
const result = {}
for (const path in modules) {
const moduleDefault = modules[path] // 实际导出结果
const matched = path.match(/[^\/\.]+/g).slice(0, -1) // 按路径分割
console.log('🚀 ~ matched:', matched)
let current = result // 初始上层
for (let i = 0; i < matched.length; i++) {
const key = matched[i]
current[key] = current[key] || {} // 初始化层级
if (i === matched.length - 1) {
current[key] = moduleDefault // 最后一层赋值
}
current = current[key] // 更新上层
}
}
console.log('🚀 ~ result:', result)
result.bar.a.n1.m()
打印结果
{
"bar": {
"a": {
"n1": fn,
"n2": fn
},
"b": {
"n1": fn,
"n2": fn
}
}
}
Loading...