低代码phase1

8 阅读7分钟

我很高兴能帮助你学习这个低代码平台项目!这是一个很有价值的简历项目。让我先为你整理学习路线图。

首先,让我获取项目的基本结构和关键信息:现在让我获取项目的目录结构,了解代码的组织方式:完美!我已经扫描了你的低代码平台项目。现在让我为你设计一份循循善诱、层层深入的学习路径,帮你建立清晰的项目框架。


🏗️ 你的低代码平台项目全景图

lowcode-vue-refactor(低代码平台前端)
├─ 项目概要:Vue3 + TypeScript + Vite 重构的低代码编辑器
├─ 主要工作流程:创建 → 编辑 → 发布 → 预览
└─ 核心价值:无需代码,通过拖拽组件快速搭建页面

语言构成

  • Vue(67.1%):主框架和组件
  • JavaScript(24.7%):逻辑和工具
  • TypeScript(5.1%):类型安全
  • SCSS(2.3%):样式
  • HTML(0.8%):模板

核心技术栈

  • 框架:Vue 3 + Vite 6
  • 状态管理:Pinia(替代Vuex)
  • 路由:Vue Router 4
  • UI库:Element Plus
  • 事件总线:Mitt
  • HTTP:Axios
  • 特殊库:Video.js(视频支持)、file-saver(文件保存)

📚 分模块学习路径(4-5个递进阶段)

我为你设计了一套可背诵、可追问、可展开的学习框架。建议按顺序学习:

第一阶段:项目入门(项目全貌 & 开发环境)

可背诵表述:

这是一个基于 Vue3 + TypeScript + Vite 的低代码平台前端。它包含三个主要工作流程模块:编辑区(创建和修改页面)、属性面板(配置组件属性)、发布系统(生成和部署页面)。

核心理解点:

  1. 项目为什么从 Vue CLI 迁移到 Vite?

    • Vite:更快的开发服务器(冷启动 < 1s)
    • Vue CLI:传统构建,启动较慢
    • 对标代码对比:backup/package.json(旧)vs package.json(新)
  2. TypeScript 的引入有什么好处?

    • 类型安全:编译阶段捕获错误
    • 更好的代码提示和重构支持
    • 适合团队项目维护
  3. 项目在做什么?

    • 左侧:组件库面板
    • 中间:画布编辑区
    • 右侧:属性配置面板
    • 底部/顶部:操作按钮(保存、发布、预览)

要追问的问题:

  • "项目的 3000 端口用来做什么?"(答:本地开发服务器)
  • "为什么要使用 Pinia 而不是 Vuex?"(答:轻量级、类型更友好、API更简洁)

第二阶段:项目结构剖析(文件组织逻辑)

可背诵表述:

src 目录中包含 8 个核心模块:路由、存储、组件、工具、数据、视图、资产。其中组件目录又分为基础组件、核心渲染、全局组件、属性面板、样式面板、功能模块 6 个子类。

目录树:

src/
├─ main.ts          ← 应用入口,初始化 Vue + Pinia + Router
├─ App.vue          ← 根组件,包含 router-view
├─ router/          ← 路由配置(3条路由)
│  └─ index.ts
├─ stores/          ← Pinia 全局状态(2个store)
│  └─ index.ts
├─ components/      ← 组件库(关键!)
│  ├─ basic/        ← 基础编辑组件(Button、Text、Img、Link、Video)
│  ├─ core/         ← 核心渲染引擎(DynamicDraw、SingleDraw、FlexBox)
│  ├─ global/       ← 全局功能组件(Header、Dialog、Button等)
│  ├─ property/     ← 属性配置面板(每个组件一套)
│  ├─ style/        ← 样式配置面板(每个组件一套)
│  ├─ module/       ← 右侧功能模块(数字输入、颜色选择器等)
│  └─ index.ts      ← 组件自动注册入口
├─ views/           ← 页面视图
│  ├─ main.vue      ← 主编辑页面
│  ├─ layout/       ← 布局组件
│  └─ release/      ← 发布相关页面
├─ api/             ← API 请求(HTTP 接口)
├─ utils/           ← 工具函数
├─ assets/          ← 静态资源
└─ data/            ← 数据文件

关键文件详解:

文件作用重要性
src/main.ts应用初始化,注册全局插件⭐⭐⭐���⭐
src/components/index.ts将所有组件注册为全局组件⭐⭐⭐⭐
src/router/index.ts定义 3 条路由:主页、发布、示例⭐⭐⭐⭐
src/stores/index.tsPinia store(状态管理)⭐⭐⭐

要追问的问题:

  • "为什么组件要分成 basic、property、style 三类?"(答:关注点分离,便于管理)
  • "core 目录里的三个文件是做什么的?"(需要深入第三阶段)

第三阶段:核心渲染引擎(DynamicDraw & SingleDraw)

可背诵表述:

低代码平台的心脏是两个渲染引擎:DynamicDraw(动态渲染多个组件)和 SingleDraw(单个组件渲染)。它们根据 JSON 数据结构,动态生成 Vue 组件树。

这个模块的本质问题:

  • "如何把 JSON 对象转换成真实的 Vue 组件?"
  • 答:通过 Vue 的 <component :is="componentName" /> 动态组件特性

需要查看的文件:

src/components/core/
├─ DynamicDraw.vue          ← 关键!动态渲染逻辑
├─ SingleDraw.vue           ← 单组件渲染
├─ PowerfulDynamicDraw.vue  ← 增强版渲染
└─ FlexBox.vue              ← 弹性布局容器

数据结构示例(猜测):

{
  "components": [
    {
      "id": "btn_001",
      "type": "ButtonCom",
      "props": {
        "text": "点击我",
        "color": "#007bff"
      },
      "style": {
        "width": "100px",
        "height": "40px"
      }
    }
  ]
}

要追问的问题:

  • "DynamicDraw 和 SingleDraw 的区别是什么?"
  • "PowerfulDynamicDraw 相比 DynamicDraw 强在哪里?"
  • "FlexBox 是否提供了响应式布局?"

第四阶段:组件系统(Basic + Property + Style 三位一体)

可背诵表述:

每个可编辑的组件(Button、Text、Img等)都由三部分组成:基础组件(ButtonCom)负责渲染、属性面板(ButtonProp)负责配置数据、样式面板(ButtonStyle)负责配置样式。用户通过属性和样式面板修改数据,基础组件实时更新。

现有组件清单:

基础组件(5个):
  └─ ButtonCom(按钮)
  └─ TextCom(文本)
  └─ ImgCom(图片)
  └─ LinkCom(链接)
  └─ VideoCom(视频)

对应的属性面板(5个):
  └─ ButtonProp, TextProp, ImgProp, LinkProp, VideoProp

对应的样式面板(5个):
  └─ ButtonStyle, TextStyle, ImgStyle, LinkStyle, VideoStyle

通用面板(2个):
  └─ CommonProp(通用属性)
  └─ CommonStyle(通用样式)
  └─ FlexBoxProp / FlexBoxStyle(布局属性)

组件通信流程:

用户操作右侧面板 
  ↓ (emit 事件或修改 store)
状态管理系统(Pinia)更新数据
  ↓
中间画布(DynamicDraw)监听到状态变化
  ↓
基础组件(如 ButtonCom)实时重新渲染

要追问的问题:

  • "如何在属性面板修改值后,让基础组件立即更新?"
  • "是否所有组件都共享 CommonStyle,还是有独特的样式?"
  • "新增一个组件类型(如表单),需要创建哪些文件?"

第五阶段:工作流程(从编辑到发布)

可背诵表述:

用户完整的使用流程分为三个阶段:编辑阶段(main.vue,拖拽和配置组件)→ 发布阶段(Release.vue,生成项目代码)→ 预览/示例阶段(SetExample.vue,查看成果)。

路由映射:

/              → main.vue        ← 编辑器主界面
/release/:id   → Release.vue     ← 发布页面(接收项目ID)
/example/:num  → SetExample.vue  ← 示例/预览页面

全局状态管理(Pinia):

useMainStore() {
  count           // 未来可用于计数器
  loading         // 加载状态
  doubleCount     // 计算属性示例
}

全局事件总线(Mitt):

// 在 main.ts 中注册
app.config.globalProperties.$bus = mitt()

// 用于组件间通信(如:选择了某个组件时,通知属性面板)

要追问的问题:

  • "编辑的数据保存到哪里?本地 localStorage 还是后端服务器?"
  • "发布时是否生成可独立运行的 HTML 文件?"
  • "SetExample 的 :num 参数代表什么?"

🎯 学习方法建议

第一周:环境 + 入门

  • 安装依赖:pnpm install
  • 启动开发服务器:pnpm dev
  • 打开浏览器 http://localhost:3000,观察 UI 布局
  • 阅读 main.ts 理解初始化流程
  • 背诵项目的三个关键技术栈:Vue3、Pinia、Vite

第二周:结构 + 导航

  • 跟踪 App.vue<router-view />
  • 进入 / 路由,查看 main.vue 的布局
  • 打开浏览器开发者工具,查看 DOM 树
  • 找出哪些 DOM 元素是由 components/index.ts 注册的全局组件

第三周:渲染引擎

  • 打开 src/components/core/DynamicDraw.vue
  • 理解 <component :is="componentName" /> 的工作原理
  • 在控制台输出一些 JSON 数据结构,观察渲染效果
  • 尝试修改一个基础组件(如 ButtonCom),看效果

第四周:组件系统

  • 选择一个简单组件(如 TextCom),完整阅读其三个文件
  • 追踪数据流:TextProp 修改 → 状态更新 → TextCom 重新渲染
  • 尝试添加一个新的属性(如 fontSize)到 TextCom

第五周+:深度定制

  • 理解发布流程,看 Release.vue
  • 尝试添加新的组件类型
  • 贡献代码或提交 issue

📝 可背诵的核心表述

项目定位

这是一个前端低代码编辑器,帮助非技术用户通过拖拽组件、配置属性来快速搭建页面,而无需编写代码。

技术栈亮点

使用 Vue3 + TypeScript + Vite 重构的轻量级方案,相比原始的 Vue CLI + JavaScript 版本,具有更快的开发体验和更强的类型安全。

三层架构

基础层(basic 组件)→ 配置层(property + style 面板)→ 渲染层(DynamicDraw 动态引擎)

核心技能树

入门 ① → 项目结构 ② → 渲染引擎 ③ → 组件系统 ④ → 完整工作流 ⑤

🚀 下一步

请告诉我你想从哪个阶段开始深入学习?我会为你:

  1. 查看具体代码,逐行讲解
  2. 绘制数据流图,展示信息如何在各模块流动
  3. 设计练习题,让你主动追问
  4. 提供代码示例,展示如何添加新功能

你准备好了吗?从第二阶段开始深入项目结构,还是直接跳到第三阶段研究渲染引擎呢?