获取代码中的部分代码
function getSections () {
const sidebar = fs.readFileSync(path.resolve(__dirname, 'docs/sidebar.js'), 'utf8');
return new Promise((resolve) => {
walk.simple(acorn.parse(sidebar), {
ObjectExpression(node) {
if(node.properties[0].key.name == 'sections') {
const value = node.properties[0].value;
resolve(escodegen.generate({
type: 'ArrayExpression',
elements: value.elements.map(item => {
return {
...item,
properties: item.properties.filter(item => {
return item.key.value !== 'sections'
})
}
})
}))
}
}
})
})
}
// 使用方法:
const sections = new Function(`return ${await getSections()}`)();
[
{
'title': '导航',
'path': 'nav'
},
{
'title': '按钮',
'path': 'button'
},
{
'title': '切换',
'path': 'transition'
},
{
'title': '弹窗',
'path': 'dialog'
},
{
'title': '整体效果',
'path': 'integrated'
}
]
注意❗
需要注意 escodegen.generate 返回的是
String
,如果要以数组对象的方式使用需要转换为js对象。
扩展阅读
- acorn-walk: 遍历语法树
- estree: 节点类型