开发者必看!TinyEngine低代码双向转换源码大公开


                                                                                                                                                <p>本文由TinyEngine低代码源码转换功能贡献者张珈瑜原创。</p> 

背景

当前主流低代码平台普遍采用”单向出码”模式,仅支持将 DSL(Domain Specific Language,领域特定语言)转换为 Vue 或 React 源代码。一旦开发者在生成代码后手动修改了源码,平台通常无法将这些修改同步回可视化编辑器,导致代码与可视化配置割裂,严重影响开发效率与协同维护。本项目旨在构建低代码 Vue/React 源代码到 DSL 的反向转换机制,打通可视化搭建与源码开发之间的断层,实现从 UI 配置到源码编写的无缝协同。

Vue-To-DSL 方案

目标

将 Vue 单文件组件(SFC)、整包工程或 ZIP 压缩包逆向转换为 TinyEngine 所需的 DSL Schema。

核心依赖

  • @vue/compiler-sfc / @vue/compiler-dom:解析 SFC 与模板 AST
  • @babel/parser / traverse / types:脚本 AST(支持 TS/JSX)
  • jszip:ZIP 文件读取(Node 与浏览器双端支持)
  • vue:仅用于类型对齐

数据流

解析流程详解

1. SFC 粗分

  • 使用 @vue/compiler-sfc.parse 获取 descriptor
  • 提取 template / script / scriptSetup / styles / customBlocks
  • 保留语言类型(如 lang="ts")和 scoped 状态

2. 模板解析(Template)

  • 使用 @vue/compiler-dom.parse 构建 AST
  • 递归生成组件树节点 { componentName, props, children }
  • 指令处理
    • v-ifcondition: JSExpression
    • v-forloop: { type: 'JSExpression', value: '...' }
    • v-model / v-show / v-on / v-bind → 映射至 props 或事件
    • v-slotslot: name
  • 文本节点
    • 纯文本 → Text 组件
    • 插值表达式 → Text + JSExpression
  • 组件名归一化
    • 优先使用 componentMap
    • HTML 原生标签保留小写
    • tiny-icon-* → 统一为 Iconname 属性设为 PascalCase 名称
未经允许不得转载:紫竹林-程序员中文网 » 开发者必看!TinyEngine低代码双向转换源码大公开

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
关于我们 免责申明 意见反馈 隐私政策
程序员中文网:公益在线网站,帮助学习者快速成长!
关注微信 技术交流
推荐文章
每天精选资源文章推送
推荐文章
随时随地碎片化学习
推荐文章
发现有趣的