专栏名称: 前端大全
分享 Web 前端相关的技术文章、工具资源、精选课程、热点资讯
目录
相关文章推荐
惠山市场监管  ·  惠小特讲安全之乘坐过山车 ·  8 小时前  
惠山市场监管  ·  惠小特讲安全之乘坐过山车 ·  8 小时前  
新幸福朝鲜  ·  残废少年踏上大地 ·  12 小时前  
新幸福朝鲜  ·  残废少年踏上大地 ·  12 小时前  
前端之巅  ·  为什么2025/05/28和2025-05- ... ·  2 天前  
前端早读课  ·  【第3522期】扩展 React 服务端渲染的能力 ·  昨天  
前端早读课  ·  【招聘】抖音生活服务商品团队招前端实习生 ·  昨天  
51好读  ›  专栏  ›  前端大全

使用抽象语法树把低代码配置转换成源码

前端大全  · 公众号  · 前端  · 2025-04-07 11:50

正文

请到「今天看啥」查看全文


"index" : 9
} ,
"identifierName" : "num"
} ,
"name" : "num"
} ,
"init" : {
"type" : "BinaryExpression" ,
"start" : 12 ,
"end" : 17 ,
"loc" : {
"start" : {
"line" : 1 ,
"column" : 12 ,
"index" : 12
} ,
"end" : {
"line" : 1 ,
"column" : 17 ,
"index" : 17
}
} ,
"left" : {
"type" : "NumericLiteral" ,
"start" : 12 ,
"end" : 13 ,
"loc" : {
"start" : {
"line" : 1 ,
"column" : 12 ,
"index" : 12
} ,
"end" : {
"line" : 1 ,
"column" : 13 ,
"index" : 13
}
} ,
"extra" : {
"rawValue" : 1 ,
"raw" : "1"
} ,
"value" : 1
} ,
"operator" : "+" ,
"right" : {
"type" : "NumericLiteral" ,
"start" : 16 ,
"end" : 17 ,
"loc" : {
"start" : {
"line" : 1 ,
"column" : 16 ,
"index" : 16
} ,
"end" : {
"line" : 1 ,
"column" : 17 ,
"index" : 17
}
} ,
"extra" : {
"rawValue" : 1 ,
"raw" : "1"
} ,
"value" : 1
}
}
}
] ,
"kind" : "const"
}
] ,
"directives" : [ ]
} ,
"comments" : [ ]
}

上面我们实现了把代码转换为抽象语法树,下面再给大家演示一下通过抽象语法树生成代码。

安装 @babel/types @babel/generator 依赖

  • @babel/types 可以快速创建语法树节点

  • @babel/generator 把语法树转换为代码

const t =require('@babel/types');
const g =require('@babel/generator')

const ast = t.program(
   [
     t.variableDeclaration(
       'const',
       [
         t.variableDeclarator(
           t.identifier('num'),
           t.binaryExpression(
             '+',
             t.numericLiteral(1),
             t.numericLiteral(1)
           )
         )
       ]
     )
   ]
)

const code = g.default(ast).code;

 console.log(code);

运行上面代码后输出

二、低代码生成代码实战

1、实现思路

使用 node 起一个 express 服务,对外暴露生成代码接口,前端调用这个接口,并且把当前页面 json 数据传到后端,后端解析 json 数据生成抽象语法树,然后通过抽象语法树生成代码。

前面我实现过一个低代码 demo 项目,就拿这个项目来说吧。建议大家可以先看一下我前面做的低代码平台。

2、实战

在前端低代码页面拖一个按钮到画布,然后点击生成代码按钮,调用生成代码接口。

页面 json 数据

{
   "components":[
     {
       "id":1,
       "name":"Page",
       "props":{},
       "desc":"页面",
       "fileName":"page",
       "children":[
         {
           "id":1740045570763,
           "fileName":"button",
           "name":"Button",
           "props":{
             "text":{
               "type":"static",
               "value":"按钮"
             }
           },
           "desc":"按钮",
           "parentId":1
         }
       ]
     }
   ]
}

把 json 数据转换为 jsx 元素

const t =require('@babel/types');
const g =require('@babel/generator')
const prettier =require('prettier');

functioncreateJsxStatement(component){
   // 创建 jsx 元素
   return t.jsxElement(
     t.jsxOpeningElement(
       t.jsxIdentifier(component.name),
       [






请到「今天看啥」查看全文


推荐文章
惠山市场监管  ·  惠小特讲安全之乘坐过山车
8 小时前
惠山市场监管  ·  惠小特讲安全之乘坐过山车
8 小时前
新幸福朝鲜  ·  残废少年踏上大地
12 小时前
新幸福朝鲜  ·  残废少年踏上大地
12 小时前
潮人  ·  潮流壁纸精选 | 2017-06-02
8 年前
子悠财记  ·  借钱看信任,还钱看人品
7 年前